Python2中datetime对象的timestamp方法的替代

Python2中datetime对象的timestamp方法的替代在Python3里,可以直接用datetime对象的timestamp方法得到对应的时间戳。但是Python2又没有,为了兼容,还是要找到替代品

大家好,欢迎来到IT知识分享网。Python2中datetime对象的timestamp方法的替代"

Python3里,可以直接用datetime对象的timestamp方法得到对应的时间戳。但是Python2又没有,为了兼容,还是要找到替代品,完成同样的事情。

from datetime import datetime
t = datetime.now()
timestamp = t.timestamp() # Python3才有

于是就Google一下“python 2 datetime timestamp”,第一个结果给出了这样的回答:

from datetime import datetime
import time
t = datetime.now()
timestamp = time.mktime(t.timetuple()) + t.microsecond/1000000.0

看上去没什么问题,但是t.timetuple()没有时区信息,而datetime有,那时间戳就不是UTC的了,和Python3里的又不一样。

点开后面的结果,又一个回答是这样的:

from datetime import datetime
import time
t = datetime.now()
epoch = datetime.utcfromtimestamp(0)
timestamp = (t - epoch).total_seconds()

看上去又没什么问题,但是一运行就发现,如果t和epoch中一个有时区,一个没时区,就会出现异常。

最后终于找到了个能用的,可以解决时区的问题:

from datetime import datetime
import time
t = datetime.now()
utc_naive = t.replace(tzinfo=None) - t.utcoffset()
timestamp = (utc_naive - datetime(1970, 1, 1)).total_seconds()

虽然平时戏称自己是面向Google编程的,但有时Google得到的答案也是错的,甚至要找许久才能找到正确答案,这个过程还是有点考验人的。对外界得到的东西,还需要亲自试验,可能问题隐藏在深处,难以使人察觉。上面的答案一和二都被选为正确答案并得到了许多赞,但在我这里就是错的,只因为我考虑到时区的情况,而别人可能没考虑到或者不关心。

最后我要说,还是让Python2早早入土更好。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/47338.html

(0)
上一篇 2024-04-23 12:00
下一篇 2024-04-23 15:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信