关于.net:C#中的Unix时间转换

Unix time conversions in C#

本问题已经有最佳答案,请猛点这里访问。

我正试图用Unix时间获得格林尼治标准时间。我使用以下代码:

1
2
3
4
5
6
7
8
9
<wyn>
        public static long GetGMTInMS()
        {
            var unixTime = DateTime.Now.ToUniversalTime() -
                new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

            return (long)unixTime.TotalMilliseconds;
        }
</wyn>

要将Unix时间转换回dattime对象,我使用以下方法:

1
2
3
4
5
6
7
8
<wyn>
        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;
        }
</wyn>

当我运行它时,GetGMTInMS()1320249196267。当我把它传给UnixTimeStampToDateTime()时,我得到{11/2/2011 11:53:16 AM}

很好。这是我运行代码的正确时间。我遇到的问题是,当我尝试将1320249196267放入一个unix时间转换器时,它返回的时间完全错误。

另一个问题是,我在东部时区。这返回了我时区的时间。这是DateTime对象处理的问题,还是我没有得到格林威治标准时间?


"Unix timestamp"means second since the epoch in most situation rather than millesconds…小心点!然而,像爪哇一样的东西,使用了"从上到下"的毫秒,这也许是你实际在乎的东西——你所要的工具。这完全取决于你需要什么。

另外,你不应该在本地时间做任何事情。通用时间表。

我会:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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);
}


从1970年1月1日起,大学时间是第二次,不是毫秒。将代码改为使用次数大于毫秒,并应加以实施,