17

Python 和 Matlab 经常有如下整数日期表示:

733828.0 733829.0 733832.0 733833.0 733834.0 733835.0 733836.0 733839.0 733840.0 733841.0

这些数字对应于今年的一些日期。你们知道哪个函数可以将它们转换回 YYYYMMDD 格式吗?

太感谢了!

4

4 回答 4

19

datetime.datetime课程可以在这里为您提供帮助。如果这些值被视为整数天(您没有指定它们是什么),则以下工作。

>>> from datetime import datetime
>>> dt = datetime.fromordinal(733828)
>>> dt
datetime.datetime(2010, 2, 25, 0, 0)
>>> dt.strftime('%Y%m%d')
'20100225'

您将值显示为浮点数,而上述内容不采用浮点数。如果您可以提供有关数据是什么(以及数据来自何处)的更多详细信息,则可以给出更完整的答案。

于 2010-04-12T15:26:11.937 回答
15

由于已经演示了 Python 示例,因此这里是 matlab 示例:

>> datestr(733828, 'yyyymmdd')

ans =

20090224

另外,请注意,虽然看起来很相似,但它们在 Matlab 和 Python 中实际上是不同的:

Matlab
序列日期数字表示从特定日期和时间开始的整数和小数天数,其中datenum('Jan-1-0000 00:00:00')返回数字 1。(年份 0000 只是一个参考点,并不打算解释为时间上的真实年份。)

Python, 返回对应于预测公历序数的日期,其中第 1 年的 1 月 1 日有序数 1。datetime.date.fromordinal

所以它们会相差 366 天,这显然是 0 年的长度。

于 2010-04-12T15:27:13.577 回答
5

像 733828.0 这样的日期是 Rata Die 日期,从公元 1 月 1 日开始计算(以及天的小数部分)。它们可能是 UTC 或您的时区。

朱利安日期,主要由天文学家使用,计算自公元前 4713 年 1 月 1 日格林威治中午以来的天数(和天的小数部分)。Julian date 经常与 Ordinal date 混淆,Ordinal date 是从当年 1 月 1 日开始计算的日期(2 月 2 日 = 第 33 天)。

所以 datetime 将这些东西称为序数日期,但我认为这仅在本地有意义,在 python 的世界中。

于 2012-06-21T17:46:34.527 回答
4

733828.0 是时间戳吗?如果是这样,您可以执行以下操作:

import datetime as dt
dt.date.fromtimestamp(733828.0).strftime('%Y%m%d')

附言

我认为彼得汉森是对的:)

我不是以英语为母语的人。只是想帮忙。我不太清楚时间戳和序数之间的区别:(

于 2010-04-12T15:25:05.363 回答