我想在unix时间获得GMT。我使用下面的代码:在C#中的Unix时间转换
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?
返回的类型应该是'ulong'而不是很长,因为UNIX时间戳不能为负数? –
@ErikSchierboom:那取决于 - 有很多情况下,“自Unix时代以来的秒数”或“自Unix时代以来的毫秒数”被用于*可能为负数的情况。鉴于'long.MaxValue'秒的时间距离很远,我认为在1970年之前变得更灵活并接受负值是更合理的。 –
好吧,我明白了!感谢您的解释。 –