在Python中,时间()返回的纪元时间总是从1970年1月1日开始测量?

时间:2013-01-06 20:04:36

标签: python time epoch

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

或者它是否依赖于平台?

我想在运行Python的各种机器上序列化日期时间(具有第二精度),并且能够在不同平台上读取它们,可能还使用不同的编程语言(比Python)。将序列时间序列化是一个好主意吗?

5 个答案:

答案 0 :(得分:11)

The documentation说:

  

要了解时代的内容,请查看gmtime(0)

我认为这意味着没有特定的时代得到保证。

另见this Python-Dev thread。这似乎证实了这样一种观念,即在实践中,时代总是被认为是1970/01/01,但这并没有明确保证语言。

这样做的结果是,至少对于Python来说,除非你处理奇怪而晦涩的平台,否则你可能会使用纪元时间。对于使用非Python工具阅读,您可能也没问题,但要确保您需要阅读这些工具提供的文档。

答案 1 :(得分:3)

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

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

  

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

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

答案 2 :(得分:1)

time()总是会从时代返回时间,请查看documentation

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

引用:

  

时代是时间开始的时刻。 1月1日   年,在0小时,“自纪元以来的时间”为零。对于Unix,   时代是1970年。要了解时代是什么,请看gmtime(0)。

  

了time.time()¶

     

返回自纪元以来作为浮动的秒数   点数。请注意,即使时间始终返回为   浮点数,并非所有系统都提供更好的时间   精度超过1秒。虽然此功能通常会返回   非递减值,它可以返回比以前更低的值   如果在两次通话之间设置了系统时钟,则呼叫。

(两者都来自Python文档)。

答案 3 :(得分:1)

Micropython's时代是2000年1月1日,请参阅time()utime

答案 4 :(得分: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')