Python中的纪元开始时间是否独立于平台(即始终是1970年1月1日)?
还是依赖平台?
我想在运行Python的各种机器上序列化日期时间(具有第二精度),并且能够在不同平台上读取它们,可能还使用不同的编程语言(比Python)。序列化纪元时间是个好主意吗?
要了解这个时代是什么,请看
gmtime(0)
。
我认为这意味着没有特定的时代得到保证。
另见this Python-Dev thread。这似乎证实了这样一种观念,即在实践中,时代总是被认为是1970/01/01,但这并没有明确保证语言。
这样做的结果是,至少对于Python来说,除非你正在处理奇怪而晦涩的平台,否则你可能还可以使用纪元时间。对于使用非Python工具阅读,您可能也没问题,但要确保您需要阅读这些工具提供的文档。
纪元时间(unix时间)是一个标准术语:
http://en.wikipedia.org/wiki/Unix_time
Unix时间或POSIX时间是用于描述时间实例的系统,定义为自1970年1月1日午夜协调世界时(UTC),[注1]不计算闰秒后经过的秒数。[注2]它广泛用于类Unix和许多其他操作系统和文件格式。它既不是时间的线性表示也不是UTC的真实表示。[注3]在某些Unix系统上可以通过在命令行上键入date +%s来检查Unix时间
这意味着如果您通过Python使用纪元时间,它将跨平台保持一致。一致性的最佳选择是在所有情况下都使用UTC。
time()
将永远从时代返回时间,看看documentation。
请注意,Epoch始终是自1970年以来的秒数,但由于不同机器上的时钟不一样 - 您可能会遇到一些问题。
引文:
时代是时间开始的时刻。当年1月1日0点,“时代以来的时间”为零。对于Unix,时代是1970年。要了解时代是什么,请查看gmtime(0)。
和:
了time.time()¶
返回自纪元以来的秒数作为浮点数。请注意,即使时间总是作为浮点数返回,但并非所有系统都提供的精度高于1秒。虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比先前调用更低的值。
(两者都来自Python文档)。
Micropython's时代是2000年1月1日,见time()和utime。
在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')