In Python, is epoch time returned by time() always measured from Jan 1, 1970?
Python中的纪元开始时间是否独立于平台(即始终是1970年1月1日)?
还是依赖平台?
我想在运行Python的各种机器上序列化日期时间(具有第二精度),并且能够在不同平台上读取它们,可能还使用不同的编程语言(比Python)。 序列化纪元时间是个好主意吗?
文件说:
To find out what the epoch is, look at
gmtime(0) .
我认为这意味着没有特定的时代得到保证。
另请参见此Python-Dev线程。这似乎证实了这样一种观念,即在实践中,时代总是被认为是1970/01/01,但这并没有明确保证语言。
这样做的结果是,至少对于Python来说,除非你正在处理奇怪而晦涩的平台,否则你可能会使用纪元时间。对于使用非Python工具阅读,您可能也没问题,但要确保您需要阅读这些工具提供的文档。
纪元时间(unix时间)是一个标准术语:
http://en.wikipedia.org/wiki/Unix_time
Unix time, or POSIX time, is a system for describing instances in
time, defined as the number of seconds that have elapsed since
midnight Coordinated Universal Time (UTC), 1 January 1970,[note 1] not
counting leap seconds.[note 2] It is used widely in Unix-like and many
other operating systems and file formats. It is neither a linear
representation of time nor a true representation of UTC.[note 3] Unix
time may be checked on some Unix systems by typing date +%s on the
command line
这意味着如果您通过Python使用纪元时间,它将跨平台保持一致。一致性的最佳选择是在所有情况下都使用UTC。
Micropython的时代是2000年1月1日,见时间()和utime。
请注意,Epoch始终是自1970年以来的秒数,但由于不同机器上的时钟不一样 - 您可能会遇到一些问题。
引文:
The epoch is the point where the time starts. On January 1st of that
year, at 0 hours, the"time since the epoch" is zero. For Unix, the
epoch is 1970. To find out what the epoch is, look at gmtime(0).
和:
time.time()?
Return the time in seconds since the epoch as a floating
point number. Note that even though the time is always returned as a
floating point number, not all systems provide time with a better
precision than 1 second. While this function normally returns
non-decreasing values, it can return a lower value than a previous
call if the system clock has been set back between the two calls.
(两者都来自Python文档)。
在Python pandas.to_datetime()中,虽然默认为unix epoch origin,但您可以通过提供自定义引用时间戳来更改它。
例如,
1 2 3 4 5 | 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日期开始日期。
1 2 | pd.to_datetime(18081, unit='D', origin='1960-1-1') #change to your reference start date Out: Timestamp('2009-07-03 00:00:00') |