【问题标题】:Convert Unix timestamp value to human readable python将 Unix 时间戳值转换为人类可读的 python
【发布时间】:2017-08-16 05:49:57
【问题描述】:

我有一个 Unix 时间戳,其值为 1502878840。这个 Unix 时间戳值可以转换为人类可读的值,例如 Aug 16, 2017 10:20:40。 我有 2 个以下 python 代码将1502878840 转换为Aug 16, 2017 10:20:40。他们都给出了相同的结果 (Aug 16, 2017 10:20:40)

  1. 第一种方法
    utc = datetime.fromtimestamp(1502878840)
  2. 第二种方法
    utc = datetime(1970, 1, 1) + timedelta(seconds=1502878840)

谁能回答我以下 2 个问题。
1. 两种方法的结果相同。但是从Python代码的逻辑来看,有没有什么情况会导致结果的不同呢?
我问这个问题是因为我看到大多数 python 代码都使用第一种方法。
2.当我阅读here时,Unix时间将在2038年1月19日格林威治标准时间03:14:08出现问题。
我运行了一个日期在 2038 年 1 月 19 日之后的时间戳(2148632440-Feb 01, 2038 10:20:40)。结果如下
第一种方法:ValueError: timestamp out of range for platform time_t
第二种方法:2038-02-01 10:20:40
问题是:我可以使用第二种方法来克服“2038年问题”的问题吗?

【问题讨论】:

  • 第一种方法需要是utcfromtimestamp()
  • @Mark Tolonen:非常感谢您的建议。我再次阅读了日期时间手册。最好使用utcfromtimestamp

标签: python unix-timestamp


【解决方案1】:

引用documentation

如果时间戳超出平台 C localtime() 或 gmtime() 函数支持的值范围,并且在 localtime() 或 gmtime() 失败时出现 OSError,则 fromtimestamp() 可能会引发 OverflowError。 这通常被限制在 1970 年到 2038 年之间。请注意,在时间戳概念中包含闰秒的非 POSIX 系统上,闰秒会被忽略通过 fromtimestamp(),然后有可能有两个相差一秒的时间戳产生相同的日期时间对象。另请参见 utcfromtimestamp()。

第二种方案解决了你的问题:

utc = datetime(1970, 1, 1) + timedelta(seconds=1502878840)

【讨论】:

  • timedelta 文档提到了 999999999 天的限制。这还不到 300 万年。地球的寿命可能比这长得多。
  • @Gribouillis 好消息,Python 可能会幸存下来?
  • @Laurent LAPORTE:感谢您的回答。通过这个答案,我有了克服 2038 年问题的方法。
  • @Gribouillis:感谢您提供的信息。其实我的目的是先解决2038年的问题。我知道timedelta 有您提到的限制(300 万年),但是对于这样一个非常遥远的未来,我们无法确定任何事情。硬件运行python程序能运行到下一个3M年吗?我看到一些 RTC 芯片也限制了它们的正确运行,直到 2099 年 :)。
猜你喜欢
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多