如何将整数日期格式转换为YYYYMMDD?

19 投票
4 回答
91343 浏览
提问于 2025-04-15 21:30

在Python和Matlab中,日期常常用整数来表示,像这样:

733828.0
733829.0
733832.0
733833.0
733834.0
733835.0
733836.0
733839.0
733840.0
733841.0

这些数字代表了今年的某些日期。你知道哪个函数可以把它们转换回YYYYMMDD的格式吗?

4 个回答

6

733828.0 是一个时间戳吗?如果是的话,你可以这样做:

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

附言

我觉得彼得·汉森说得对 :)

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

16

因为已经展示了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的长度。

20

datetime.datetime 类可以在这里帮到你。下面的代码可以正常工作,前提是这些值被当作整数天来处理(你没有说明它们是什么)。

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

你展示的值是浮点数,而上面的代码不接受浮点数。如果你能提供更多关于数据的细节(以及它们来自哪里),那么就可以给出更完整的答案。

撰写回答