12

Python 中的纪元开始时间是否独立于平台(即始终为 1/1/1970)?

还是依赖于平台?

我想在运行 Python 的各种机器上序列化日期时间(以秒精度),并能够在不同的平台上读回它们,可能还使用不同的编程语言(而不是 Python)。序列化纪元时间是个好主意吗?

4

5 回答 5

11

文档说:

要了解时代是什么,请查看gmtime(0).

我将这解释为不保证特定的时代。

另请参阅此 Python-Dev 线程。这似乎证实了这样一个概念,即在实践中,时代总是被假定为 1970/01/01,但语言并没有明确保证这一点。

这样做的结果是,至少对于 Python 来说,使用纪元时间可能没问题,除非你正在处理奇怪和晦涩的平台。对于使用非 Python 工具阅读,您可能还可以,但要特别确定您需要阅读这些工具提供的文档。

于 2013-01-06T20:09:45.337 回答
3

纪元时间(unix time)是一个标准术语:

http://en.wikipedia.org/wiki/Unix_time

Unix 时间或 POSIX 时间是用于描述时间实例的系统,定义为自 1970 年 1 月 1 日协调世界时 (UTC) 午夜以来经过的秒数,[注 1] 不包括闰秒。 [注 2 ] 它广泛用于类 Unix 和许多其他操作系统和文件格式。它既不是时间的线性表示,也不是 UTC 的真实表示。[注 3] 在某些 Unix 系统上,可以通过在命令行上键入 date +%s 来检查 Unix 时间

这意味着如果您通过 Python 使用纪元时间,它将跨平台保持一致。保持一致性的最佳选择是在所有情况下都使用 UTC。

于 2013-01-06T20:06:47.487 回答
1

time()总是会从纪元返回时间,请查看文档

请注意,Epoch 始终是自 1970 年以来的秒数,但由于不同机器上的时钟不一样 - 您可能会遇到一些问题。

引文:

纪元是时间开始的点。当年 1 月 1 日,0 时,“自纪元以来的时间”为零。对于 Unix,纪元是 1970。要找出纪元是什么,请查看 gmtime(0)。

和:

time.time()¶

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

(均来自 Python 文档)。

于 2013-01-06T20:08:12.797 回答
1

Micropython 的时代是 2000 年 1 月 1 日,见time()utime

于 2017-01-07T21:11:38.187 回答
0

在 Python pandas.to_datetime() 中,虽然默认值为 unix epoch origin,但您可以通过提供自定义参考时间戳来更改它。

例如,

pd.to_datetime(18081) #default unix epoch
Out: Timestamp('1970-01-01 00:00:00.000018081') #default is in nanosecond

pd.to_datetime(18081, unit='D')
Out: Timestamp('2019-07-04 00:00:00') #change unit of measure

您可以将其更改为任何参考日期。确保单位合理。在下面的示例中,我们将原点设置为 1960 年 1 月 1 日。请注意,这是默认的 SAS 日期开始日期。

pd.to_datetime(18081, unit='D',  origin='1960-1-1') #change to your reference start date
Out: Timestamp('2009-07-03 00:00:00')
于 2019-03-14T15:59:10.660 回答