C# 中的 Unix 时间转换 [重复]

2024-02-07

我正在尝试以unix时间获取GMT。我使用以下代码:


        public static long GetGMTInMS()
        {
            var unixTime = DateTime.Now.ToUniversalTime() -
                new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

            return (long)unixTime.TotalMilliseconds;
        }

然后,为了将 Unix 时间转换回 DateTime 对象,我使用以下命令:


        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() I get {11/2/2011 11:53:16 AM}

这很好。这是我运行代码的正确时间。我遇到的问题是当我尝试放置1320249196267转换为unix时间转换器,例如this http://www.onlineconversion.com/unix_time.htm,它返回完全错误的时间。

另一个问题是我在东部时区。这返回了我所在时区的时间。这是不是DateTime对象句柄还是我没有得到 GMT。


“Unix时间戳”的意思seconds因为大多数情况下是纪元而不是毫秒......小心!然而,像 Java 这样的东西使用“自纪元以来的毫秒数”,这可能就是你的意思actually关心 - 尽管你展示了工具。这实际上取决于您的需要。

此外,您不应该按照当地时间做任何事情。始终坚持世界时间。

我会:

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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的 Unix 时间转换 [重复] 的相关文章

随机推荐