Python和Matlab通常具有如下的整数日期表示:
733828.0 733829.0 733832.0 733833.0 733834.0 733835.0 733836.0 733839.0 733840.0 733841.0
这些数字对应于今年的某些日期。你们知道哪个函数可以将它们转换回YYYYMMDD格式吗?
感谢百万!答案 0 :(得分:17)
datetime.datetime
class可以帮到你。以下是有效的,如果这些值被视为整数天(您没有指定它们是什么)。
>>> from datetime import datetime
>>> dt = datetime.fromordinal(733828)
>>> dt
datetime.datetime(2010, 2, 25, 0, 0)
>>> dt.strftime('%Y%m%d')
'20100225'
您将值显示为浮点数,上面不会显示浮点数。如果您可以提供有关数据(及其来源)的更多详细信息,则可以提供更完整的答案。
答案 1 :(得分:15)
由于已经演示了Python示例,因此这里是matlab:
>> datestr(733828, 'yyyymmdd')
ans =
20090224
另外,请注意,虽然看起来很相似,但这些在Matlab和Python中实际上是不同的东西:
Matlab的
序列日期编号表示整数和小数天数 从datenum('Jan-1-0000 00:00:00')
返回的特定日期和时间开始 数字1.(0000年仅仅是一个参考点,并非意图 被解释为真实的一年。)Python,
datetime.date.fromordinal
返回对应于公历格里高利序数的日期,其中第1年1月1日有序数1.
所以他们会有366天的差异,这显然是0年的长度。
答案 2 :(得分:5)
733828.0这样的日期是Rata Die日期,从公元1月1日开始计算(和小数部分天数)。它们可能是UTC或您的时区。
Julian Dates主要由天文学家使用,计算自公元前4713年1月1日格林威治中午以来的天数(和小数部分天数)。 Julian日期经常与Ordinal日期相混淆,Ordinal日期是当年1月1日的日期计数(2月2日=序数日33)。
所以datetime正在调用这些事情的序数日期,但我认为这只在本地有意义,在python的世界里。
答案 3 :(得分:4)
733828.0是时间戳吗?如果是这样,您可以执行以下操作:
import datetime as dt
dt.date.fromtimestamp(733828.0).strftime('%Y%m%d')
我认为Peter Hansen是对的:)。
我不是以英语为母语的人。只是想帮忙。我不太清楚时间戳和序数之间的区别:(