下面的函数应该将以下unix时间转换为c# DateTime对象:
1362506086000
上面的时间应该代表March 5, 2012 12:54 PM。
然而,每次我通过下面的函数运行它时,它都变成了5:54 PM:
3/5/2013 5:54:46 PM
static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds;
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
{
return unixTimeStamp > MaxUnixSeconds
? UnixEpoch.AddMilliseconds(unixTimeStamp)
: UnixEpoch.AddSeconds(unixTimeStamp);
}
如何使unix时间正确地表示为12:54而不是5:54?
听起来像是时区问题。请确保用于生成Unix时间的时区与Windows系统的时区相同,或者进行相应的转换。
对我来说,解决办法是将ToLocalTime()
添加到代码中,如下所示:
static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds;
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
{
return unixTimeStamp > MaxUnixSeconds
? UnixEpoch.AddMilliseconds(unixTimeStamp).ToLocalTime()
: UnixEpoch.AddSeconds(unixTimeStamp).ToLocalTime();
}