将Unix时间戳值转换为人类可读的python

将Unix时间戳值转换为人类可读的python,python,unix-timestamp,Python,Unix Timestamp,我有一个Unix时间戳,其值为1502878840。此Unix时间戳值可以转换为人类可读的值,如2017年8月16日10:20:40。 我有以下两个python代码将1502878840转换为2017年8月16日10:20:40。两者给出了相同的结果(2017年8月16日10:20:40) 第一种方法 utc=datetime.fromtimestamp(1502878840) 第二种方法 utc=datetime(1970,1,1)+timedelta(秒=1502878840) 谁能回答我以

我有一个Unix时间戳,其值为
1502878840
。此Unix时间戳值可以转换为人类可读的值,如2017年8月16日10:20:40。 我有以下两个python代码将
1502878840
转换为
2017年8月16日10:20:40
。两者给出了相同的结果(
2017年8月16日10:20:40

  • 第一种方法
    utc=datetime.fromtimestamp(1502878840)
  • 第二种方法
    utc=datetime(1970,1,1)+timedelta(秒=1502878840)
  • 谁能回答我以下两个问题。
    1.两种方法的结果相同。但是从Python代码的逻辑角度来看,是否有任何情况会导致结果的差异?
    我问这个问题是因为我看到大多数python代码都使用第一种方法。
    2.正如我所读到的,Unix时间将在2038年1月19日03:14:08 GMT出现问题。
    我运行了一个日期在2038年1月19日之后的时间戳(
    2148632440
    -
    2038年2月1日10:20:40
    )。结果如下
    第一种方法:
    ValueError:timestamp超出平台时间的范围
    第二种方法:
    2038-02-01 10:20:40

    问题是:我能用第二种方法来解决“2038年问题”吗

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

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

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

    第一种方法需要是
    utcfromtimestamp()
    @marktolonen:非常感谢您的建议。我又读了datetime手册。如果我们使用
    utcfromtimestamp
    更好,
    timedelta
    文档提到了
    99999999
    天的限制。这还不到300万年。地球可能会持续更长的时间。@gribouilli是个好消息,巨蟒可能会存活下来@Laurent LAPORTE:谢谢你的回答。通过这个答案,我有了一个解决2038年问题的方法。@Gribouillis:谢谢你提供的信息。实际上,我的意图是首先解决2038年的问题。我知道,正如您所说,timedelta有一个限制(300万年),但对于这样一个遥远的未来,我们无法确定任何事情。运行python程序的硬件可以运行到下一个300万年吗?我看到一些RTC芯片也限制了它们的正确操作,直到2099:)。