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

问题描述 投票:11回答:5

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

还是依赖平台?

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

python time epoch
5个回答
11
投票

The documentation说:

要了解这个时代是什么,请看gmtime(0)

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

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

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


3
投票

纪元时间(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。


1
投票

time()将永远从时代返回时间,看看documentation

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

引文:

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

和:

了time.time()¶

返回自纪元以来的秒数作为浮点数。请注意,即使时间总是作为浮点数返回,但并非所有系统都提供的精度高于1秒。虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比先前调用更低的值。

(两者都来自Python文档)。


1
投票

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


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')
© www.soinside.com 2019 - 2024. All rights reserved.