Unix DateTime差异

时间:2013-03-05 18:40:46

标签: c# datetime unix-timestamp

下面的函数应该将以下的unix时间转换为C#DateTime对象:

1362506086000

上面的时间应该代表 2012年3月5日下午12:54

但是,每次我通过下面的函数运行它时,它都会变为下午5:54

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

2 个答案:

答案 0 :(得分:2)

这听起来像是时区问题。确保用于生成Unix时间的时区与Windows系统上的时区相同,或相应地进行转换。

答案 1 :(得分:0)

对我来说,修复是将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();
}