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

Ber*_*ant 8 python datetime timestamp

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

jro*_*jro 13

我确实记得关于这个事情的讨论/错误报告,而我想知道这个时间回来了.长话短说:已经提出了很多建议,但由于某种原因,没有人接受过.

关键是我认为最好总结在这个答复:

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

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

这个故事的最终结果是添加了关于如何自己完成的文档:

# 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)
Run Code Online (Sandbox Code Playgroud)