我想在unix时间内获得GMT。我使用以下代码:
public static long GetGMTInMS()
{
var unixTime = DateTime.Now.ToUniversalTime() -
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return (long)unixTime.TotalMilliseconds;
}
然后将unix时间转换回DatTime对象,我使用:
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
{
System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp).ToLocalTime();
return dtDateTime;
}
当我运行它时,GetGMTInMS()
1320249196267
。当我将其传递给UnixTimeStampToDateTime()
时,我得到{11/2/2011 11:53:16 AM}
哪个好。这是我运行代码时的正确时间。我遇到的问题是,当我尝试将1320249196267
放入unix时间转换器(例如this)时,它会返回完全错误的时间。
另一个问题是,我在东部时区。这返回了我所在时区的时间。这是DateTime
对象处理的内容还是我没有获得GMT。
答案 0 :(得分:117)
“Unix时间戳”是指秒,因为大多数情况下的纪元而不是毫秒......小心!但是,Java之类的东西使用“自纪元以来的毫秒”,这可能是你实际关心的 - 尽管你展示了这个工具。这实际上取决于你的需求。
此外,您不应该在当地时间做任何事情。始终坚持普及时间。
我会:
private static readonly DateTime UnixEpoch =
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static long GetCurrentUnixTimestampMillis()
{
return (long) (DateTime.UtcNow - UnixEpoch).TotalMilliseconds;
}
public static DateTime DateTimeFromUnixTimestampMillis(long millis)
{
return UnixEpoch.AddMilliseconds(millis);
}
public static long GetCurrentUnixTimestampSeconds()
{
return (long) (DateTime.UtcNow - UnixEpoch).TotalSeconds;
}
public static DateTime DateTimeFromUnixTimestampSeconds(long seconds)
{
return UnixEpoch.AddSeconds(seconds);
}
答案 1 :(得分:5)
UNIX时间是自1970年1月1日以来的秒数,而不是毫秒。将代码更改为使用秒而不是毫秒,它应该可以工作,