【问题标题】:How can I proper date time value from unix time?如何从 unix 时间中获取正确的日期时间值?
【发布时间】:2018-11-18 16:56:40
【问题描述】:

UNIX 时间戳

  1262304000
  1224633600
  940636800
  939772800
  1332288000
  1096934400
  1088121600    
   ...

1.试试

frmt_date = dt.datetime.utcfromtimestamp(1088121600).strftime("%Y/%m/%d %H:%M")

那些时间值的结果是00:00

(结果)

 2012-10-11 00:00
 2004-04-20 00:00
 1999-01-07 00:00
 ....
  1. 试试

     def xldate_to_datetime(xldate):
     temp = dt.datetime(1899, 12, 30)
     delta = dt.timedelta(days=xldate)
     return temp+delta
     ts = "1262304000"
     tsxl = ((int(ts)/60)/60)/24 + 25569
     readabledate =  xldate_to_datetime(tsxl)
     print(readabledate)
    

时间值的结果都是00:00

如何从那些 UNIX https://i.stack.imgur.com/khDmi.jpg 获得适当的时间

【问题讨论】:

  • 如果您的所有时间戳都对应于格林威治标准时间 00:00,那么您得到的时间是 00:00 也就不足为奇了。你的问题到底是什么?
  • 您似乎很确定这些结果是错误的。您还期待什么其他结果?
  • 结果与值相对应。你可以检查一下:dt.datetime.utcfromtimestamp(dt.datetime.now().timestamp()).strftime("%Y/%m/%d %H:%M")

标签: python datetime unix-timestamp


【解决方案1】:

转换都是正确的。

时间戳都恰好是从 1970 年 1 月 1 日午夜开始的秒数,其 mod (3600 * 24) 为 0,即所有时间戳对应于 UTC 中某个日期的午夜。

您可以快速确认这一点,而无需实际转换为日期时间对象:

assert all(t % 86400 == 0 for t in timestamps) 

【讨论】:

  • 旁注:根据 wikiepdia 页面的闰秒:86400 秒/天是由于 POSIX 标准,但它与 UTC 日期不一致。自 1970 年以来有很多闰秒,所以我怀疑 86400 秒/天检查准确午夜 UTC 日期表示的一致性。(也许我想多了)
  • @LoneWanderer 是的。 UTC 严格增加,而 Unix 时间则没有。然而,由于闰秒不能很好地预测编程中的确定性时间戳,Unix 稍作调整来帮助管理这一点:unix 时间不是 UTC 的真实表示,因为 UTC 中的闰秒共享相同的 Unix时间作为它之前的第二个时间 en.wikipedia.org/wiki/Unix_time。所以 86400 在这里应该可以正常工作。
【解决方案2】:

另一种方法

>>> mytime =  1332288000
>>> import datetime as dt
>>> frmt_date = dt.datetime.utcfromtimestamp(mytime).strftime("%Y/%m/%d %H:%M")
>>> print(frmt_date)
2012/03/21 00:00
>>> mytime =  mytime + 10000
>>> frmt_date = dt.datetime.utcfromtimestamp(mytime).strftime("%Y/%m/%d %H:%M")
>>> print(frmt_date)
2012/03/21 02:46

所以,您的约会时间确实是 00:00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2013-03-20
    • 2014-05-23
    • 2021-12-19
    相关资源
    最近更新 更多