大家好,欢迎来到IT知识分享网。
在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