【问题标题】:Unix DateTime DiscrepancyUnix 日期时间差异
【发布时间】:2013-02-20 07:31:16
【问题描述】:

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

1362506086000

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

但是,每次我通过下面的函数运行它时,它都会变为 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

【问题讨论】:

  • 您可能需要查找将 GMT(或者这些天是 UTC?)转换为本地时间的函数。也许这会有所帮助:stackoverflow.com/questions/5397775/…> 语言可能不同,但所需的函数通常在不同语言中具有相同或非常相似的名称。
  • 好问题;我不知道他们发送给我的时区。我只知道它应该是 12:54,当我将它插入我的函数时,它会出现 5:45...
  • @user1477388:在对它进行任何操作之前,您应该始终问自己日期或时间所在的时区。
  • 很难知道他们发给我的是哪个时区;我必须知道服务器在哪里,对吗?
  • 如果有人向您发送没有时区的日期时间,而您不知道他们是谁或他们在哪里,那么您根本不知道他们的意思是什么,对吧。您要么需要就 UTC 达成一致,要么以 ISO8601 格式发送带有明确偏移的时间。这进入 c# 中的 DateTimeOffset,您可以使用 o 格式字符串为 ToString()Parse()

标签: c# datetime unix-timestamp


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    对我来说,解决方法是将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();
    }
    

    【讨论】:

    • 小心 - ToLocalTime() 现在可能会得到一个对你有意义的值 - 但除非你能保证时间戳起源于同一时区或在 UTC,否则这将得到你惹上麻烦了。但是 - unix 时间戳假定 为 UTC。只要确保当地时间是您真正追求的时间。
    • 谢谢,马特;我会考虑的。
    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2016-05-12
    • 2013-03-10
    • 1970-01-01
    相关资源
    最近更新 更多