为什么python datetime类有'fromtimestamp'方法,但不是'totimestamp'方法?

时间:2011-11-23 14:08:19

标签: python datetime timestamp

Python的datetime类有一个fromtimestamp方法可以从时间戳创建一个datetime对象,但不提供totimestamp方法。 。 我知道像time.mktime(x.timetuple())之类的东西你可以将datetime对象转换为时间戳,但这对我来说看起来不太复杂,所以我很好奇为什么没有totimestamp方法?

1 个答案:

答案 0 :(得分:13)

我确实记得discussion/bug report关于这个事情,而我想知道这件事情的回忆。长话短说:已经提出了很多建议,但由于某些原因,没有人接受过。

关键是我认为最好总结在this reply

  

很多人提出了一个令人满意的解决方案。没有人能提出令你满意的解决方案,因为你已经过度限制了这个问题。在这些年之后我们仍然没有utctotimestamp()的原因是你,而且据我所知,你单独拒绝接受一个方法,该方法在其工作范围内以微秒精度反转utcfromtimestamp()。这样的方法是一个非常合理和可接受的解决方案,并且会为Python作为一种语言增加很多价值。

     

我怀疑你没有意识到你通过单独阻止这个问题的进展而无意中造成了多大的痛苦。我见过他们:学生,朋友,同事 - 甚至非常聪明和有能力的人都受到了阻碍。没有人想到查看日历模块。也许如果你看到他们中的一些人在努力解决这个问题,你会明白的。

这个故事的最终结果是documentation was added关于如何自己做的事情:

# On the POSIX compliant platforms, `utcfromtimestamp(timestamp)` is
# equivalent to the following expression:
datetime(1970, 1, 1) + timedelta(seconds=timestamp)

# There is no method to obtain the timestamp from a `datetime` instance,
# but POSIX timestamp corresponding to a `datetime` instance `dt` can be
# easily calculated as follows. For a naive `dt`:
timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)

# And for an aware ``dt``::
timestamp = (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)) / timedelta(seconds=1)