2

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

1362506086000

上面的时间应该代表March 5, 2012 12:54 PM

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

2013 年 3 月 5 日下午 5:54:46

    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

4

2 回答 2

2

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

于 2013-03-05T18:43:10.513 回答
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();
}
于 2013-03-05T19:20:18.897 回答