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

在Python中,time()返回的历元时间是否总是从1970年1月1日开始测量?,python,time,epoch,Python,Time,Epoch,Python中的纪元开始时间是否独立于平台(即始终为1/1/1970) 还是依赖于平台 我想在运行Python的各种机器上序列化datetimes(以二次精度),并能够在不同的平台上读回它们,可能还使用不同的编程语言(而不是Python)。序列化历元时间是个好主意吗?历元时间(unix时间)是一个标准术语: Unix时间,或POSIX时间,是一个用于描述中实例的系统 时间,定义为此后经过的秒数 1970年1月1日午夜协调世界时(UTC)[注1]未 计算闰秒。[注2]它广泛应用于类Unix和许多

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

还是依赖于平台

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

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

Unix时间,或POSIX时间,是一个用于描述中实例的系统 时间,定义为此后经过的秒数 1970年1月1日午夜协调世界时(UTC)[注1]未 计算闰秒。[注2]它广泛应用于类Unix和许多应用程序中 其他操作系统和文件格式。它既不是线性的,也不是线性的 表示时间,也不是UTC的真实表示。[注3]Unix 在某些Unix系统上,可以通过在 命令行

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

time()
总是从历元返回时间,请查看

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

引文:

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

以及:

time.time()

以浮点形式返回自历元以来的时间(秒) 点数。请注意,即使时间始终作为 浮点数,并不是所有的系统都能提供更好的时间 精度不超过1秒。而此函数通常返回 非递减值,它可以返回比上一个值更低的值 如果两次调用之间的系统时钟已设置回,则调用

(都来自Python文档)。

说:

要了解纪元是什么,请查看
gmtime(0)

我认为这意味着没有特定的时代可以保证

另见。这似乎证实了这样一种观点,即在实践中,纪元总是假定为1970/01/01,但语言并未明确保证这一点


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

epoch是1/1/2000,请参阅和。

在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')

@phihag的可能重复:您对另一个问题的回答也回答了这个问题,但问题本身并不是重复的。如果Python将在非Unix系统上运行会怎么样?@kaalus:通过Python作为接口,它仍然是一致的。它仍然是同一个Unix时间。仅仅因为名称中有“unix”,并不意味着它仅在unix系统上可用。你保证在所有支持的平台上都能得到一致的结果。我不相信这是正确的。文档中说:“本模块中定义的大多数函数都使用相同的名称调用平台C库函数。有时查阅平台文档可能会有所帮助,因为这些函数的语义因平台而异。”它可能适用于您关心的所有平台,但这并不能保证。@BrenBarn:是的,可能是真的。如果你总是基于
gmtime(0)
per-platform:-)我对你的答案投了赞成票。的确,不同的机器可能有不同的时钟时间。为此,一些解决方法包括在时间上进行一些填充编程,这样每台机器都有一些给定值,并使用诸如确保时钟合理接近的系统。谢谢kojiro,非常好的信息:)那又怎么样?@kojiro:你在问什么是
gmtime
的意思吗?它指的是Python
time
模块中的
gmtime
函数<代码>时间。gmtime(0)没有提供信息,你只是问了同样的问题。Python所基于的库,可以是CPython、Jython、IronPython–这就是
gmtime()
的有趣定义所在。