在Python中获取Unix时间

Nay*_*uki 23 python timestamp standard-library python-3.x

在Python中,我想获取当前的Unix时间戳,然后长期存储该值并由非Python系统处理。(我不仅仅是试图计算同一程序运行中两个时间戳之间的差异。)

调用该函数time.time()似乎是获取所需时间戳的一种非常合理且简洁的方法......直到我阅读文档:

以浮点数形式返回自纪元以来的时间(以秒为单位) 。纪元的具体日期和闰秒的处理取决于平台。在 Windows 和大多数 Unix 系统上,纪元是 1970 年 1 月 1 日 00:00:00 (UTC),闰秒不计入自该纪元以来的时间(以秒为单位)。这通常称为 Unix 时间。要了解给定平台上的纪元,请查看。gmtime(0)

[...]

(版本: 3.5 ~ 3.9 )

“纪元……取决于平台”这句话是一个警告信号。狡猾的说法是“大多数Unix 系统”。time.time()Python的纪元不是1970-01-01T00:00:00Z的 Unix 或非 Unix 系统的示例有哪些?

time.time()对我的目标来说是不是有点不安全?我应该寻找替代品datetime.datetime.now().timestamp()吗?


深入挖掘后,我还注意到以前版本的 Python 似乎没有以下警告time.time()

以浮点数形式返回自纪元以来的时间(以秒为单位)。请注意,尽管时间始终以浮点数形式返回,但并非所有系统都提供比 1 秒更好的时间精度。虽然此函数通常返回不递减的值,但如果系统时钟在两次调用之间被调回,则它可能返回比前一次调用更低的值。

(版本: 2.7 , 3.2 ~ 3.4 )

甚至更旧的措辞:

以浮点数形式返回时间,以 UTC 格式自纪元以来的秒数表示。请注意,尽管时间始终以浮点数形式返回,但并非所有系统都提供比 1 秒更好的时间精度。虽然此函数通常返回不递减的值,但如果系统时钟在两次调用之间被调回,则它可能返回比前一次调用更低的值。

(版本: 2.2 ~ 2.6 , 3.0 ~ 3.1 )

dan*_*cab 5

如果您不想依赖于实现time.time()和(可能)变量纪元,您可以通过获取当前日期时间自行计算 Unix 时间戳,并减去所需的 Unix 时间戳纪元的日期时间(1970 年 1 月 1 日) ,并获取秒数:

from datetime import datetime

unix_timestamp = (datetime.now() - datetime(1970, 1, 1)).total_seconds()
Run Code Online (Sandbox Code Playgroud)

注意:您可能想添加时区信息。

  • 尽管您已经在注释中提到过,但我想添加以下 `unix_timestamp = (datetime.utcnow() - datetime(1970, 1, 1)).total_seconds()` 这将为您提供正确的时间格式,因为Unix 时间以 UTC 定义 (3认同)