我有dt = datetime(2013,9,1,11),我想获得这个datetime对象的Unix时间戳。
当我做dt – datetime(1970,1))。total_seconds()我得到了时间戳1378033200。
当使用datetime.fromtimestamp转换回来时,我得到datetime.datetime(2013,9,1,6,0)。
小时不匹配。我在这里错过了什么?
你在这里错过的是时区。
大概你有五个小时关闭UTC,所以2013-09-01T11:00:00本地和2013-09-01T06:00:00Z是同一时间。
你需要阅读datetime
文档的顶部,它解释了关于时区和“天真”和“意识”对象。
如果你原来的天真datetime是UTC,恢复它的方式是使用utcfromtimestamp
而不是fromtimestamp。
另一方面,如果你原来的天真datetime是本地的,你不应该从它减去一个UTC时间戳在第一名;请改用datetime.fromtimestamp(0)。
或者,如果你有一个知道的datetime对象,你需要使用两边的本地(感知)时代,或显式转换和从UTC。
如果你有,或者可以升级到Python 3.3或更高版本,你可以通过使用timestamp
方法避免所有这些问题,而不是试图找出如何自己做。即使你不这样做,你也可以考虑borrowing its source code。
(如果你可以等待Python 3.4,它看起来像PEP 341可能会使它成为最终版本,这意味着所有的东西JF塞巴斯蒂安和我在评论中谈论应该是可行的只有stdlib,和工作在Unix和Windows上都是一样)。