Python的起始纪元时间独立于平台吗(即始终为1970年1月1日)?
还是与平台有关?
我想在运行Python的各种机器上序列化日期时间(具有秒精度),并能够在不同平台上读回它们,可能还要使用不同的编程语言(而非Python)。序列化纪元时间是否是个好主意?
文档中说:
要了解纪元是什么,请查看
gmtime(0)
。
我理解这意味着没有特定的保证纪元。
另请参阅此Python-Dev线程。这似乎证实了实际上假定纪元始终为1970/01/01,但语言本身并未明确保证。
总之,在Python中,使用纪元时间应该是没问题的,除非你在处理奇怪和不常见的平台。对于使用非Python工具进行读取,你可能也没问题,但为了确保更加安全,你需要阅读这些工具提供的文档。
gmtime
吗?它指的是Python time
模块中的gmtime
函数。 - BrenBarntime.gmtime(0)
并没有提供有用信息 - 你最终只会问同样的问题。Python所构建的库,无论是CPython、Jython还是IronPython - 那才是gmtime()
有趣定义的来源。 - kojiro时代时间(unix时间)是一个标准术语:
http://en.wikipedia.org/wiki/Unix_time
Unix时间或POSIX时间是一种描述时间的系统,定义为自1970年1月1日协调世界时(UTC)午夜以来经过的秒数,不包括闰秒。它在类Unix和许多其他操作系统和文件格式中广泛使用。它既不是时间的线性表示,也不是UTC的真实表示。可以在某些Unix系统上通过在命令行上键入date +%s来检查Unix时间。
这意味着,如果您通过Python使用epoch时间,它将在所有平台上保持一致。对于一致性,您最好在所有情况下使用UTC。
gmtime(0)
,那么它就是一致的 :-) 我为你的答案点了赞。 - jditime()
会始终返回自纪元以来的时间,请查看文档。
请注意,时代始终是自1970年以来的秒数,但由于不同计算机上的时钟不同 - 您可能会遇到一些问题。
引用:
时代是时间开始的地方。在那年的1月1日,0点,“自时代以来的时间”为零。对于Unix,时代是1970年。要找出时代是什么,请查看gmtime(0)。
和:
time.time()¶
以浮点数形式返回自纪元以来的秒数。请注意,即使时间始终作为浮点数返回,但并非所有系统都提供比1秒更好的精度的时间。虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则可以返回低于先前调用的值。
(均来自Python文档)。
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')