在Python中,我想获取当前的Unix时间戳,然后长期存储该值并由非Python系统处理。 (我不仅仅是试图计算同一程序运行中两个时间戳之间的差异。)
time.time()
似乎是获取所需时间戳的一种非常合理且简洁的方法......直到我阅读文档:
以浮点数形式返回自 epoch 以来的时间(以秒为单位)。纪元的具体日期和闰秒的处理取决于平台。在 Windows 和大多数 Unix 系统上,纪元是 1970 年 1 月 1 日 00:00:00 (UTC),闰秒不计入自该纪元以来的时间(以秒为单位)。这通常称为 Unix 时间。要了解给定平台上的纪元,请查看
gmtime
。
(0)
[...]
短语“epoch ...依赖于平台”是一个警告信号。狡猾的短语是“mostUnix 系统”。 Python 的
time.time()
纪元是 not 1970-01-01T00:00:00Z 的 Unix 或非 Unix 系统的示例有哪些?
time.time()
对于我的目标来说是不是有点不安全?我应该寻找像datetime.datetime.now().timestamp()
这样的替代品吗?
深入挖掘,我还注意到以前版本的Python似乎没有这些警告
time.time()
:
以浮点数形式返回自纪元以来的时间(以秒为单位)。请注意,尽管时间始终以浮点数形式返回,但并非所有系统都提供比 1 秒更好的时间精度。虽然此函数通常返回不递减的值,但如果系统时钟在两次调用之间被调回,则它可能返回比前一次调用更低的值。
甚至更旧的措辞:
以浮点数形式返回时间,以 UTC 格式自纪元以来的秒数表示。请注意,尽管时间始终以浮点数形式返回,但并非所有系统都提供比 1 秒更好的时间精度。虽然此函数通常返回不递减的值,但如果系统时钟在两次调用之间被调回,则它可能返回比前一次调用更低的值。
如果您不想依赖
time.time()
实现和(可能)变量纪元,您可以通过获取当前日期时间自行计算 Unix 时间戳,并减去所需的 Unix 时间戳纪元的日期时间( 1970 年 1 月 1 日),并获取秒数:
from datetime import datetime
unix_timestamp = (datetime.utcnow() - datetime(1970, 1, 1)).total_seconds()
注意:您可能想添加时区信息。
编辑:根据评论进行编辑,使用
datetime.utcnow
似乎是正确的方法。