转换日期格式python异常日期格式提取%Y%M%D

2024-05-12 18:35:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大数据集,包含以下格式的各种日期信息:

我熟悉python的时间模块、strtime()方法和strftime()方法。但是,如果有一个python模块可以用来转换这些不寻常的日期格式,我不确定上面的这些日期格式是如何调用的。

你知道如何从这些不寻常的日期格式中获取%Y%M%D格式而不必编写自己的计算器吗?

谢谢。


Tags: 模块数据方法com信息httpdatewww
3条回答

您可以尝试以下操作:

In [1]: import datetime

In [2]: s = '2012265'

In [3]: datetime.datetime.strptime(s, '%Y%j')
Out[3]: datetime.datetime(2012, 9, 21, 0, 0)

In [4]: d = '41213'

In [5]: datetime.date(1900, 1, 1) + datetime.timedelta(int(d))
Out[5]: datetime.date(2012, 11, 2)

第一个比较复杂,但它使用%j参数来解释您提供的一年中的哪一天(在四位数年份之后,用%Y表示)。第二个是1900年1月1日以来的天数。

这是一般的转换-不确定你的输入格式,但希望这可以调整,以适应它。

在Excel integer to Python datetime位上:

请注意,有两个Excel日期系统(一个基于1900年1月1日,另一个基于1904年1月1日);有关详细信息,请参见https://support.microsoft.com/en-us/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excel

还要注意,系统不是基于零的。因此,在1900系统中,1900年1月1日是第一天(而不是第0天)。

import datetime

EXCEL_DATE_SYSTEM_PC=1900
EXCEL_DATE_SYSTEM_MAC=1904

i = 42129  # Excel number for 5-May-2015
d = datetime.date(EXCEL_DATE_SYSTEM_PC, 1, 1) + datetime.timedelta(i-2)

这两种格式似乎都很容易使用。第一个,事实上,只是一个整数,你为什么不这样做呢?

import datetime

def days_since_jan_1_1900_to_datetime(d):
    return datetime.datetime(1900,1,1) + \
        datetime.timedelta(days=d)

对于第二个,细节取决于格式的确切定义(例如,即使天数少于100天,您是否总是希望在一年之后出现3位数字,或者是否有可能出现2位或1位数字?如果是,年份是否总是4位数字?)但一旦你把那部分搞定了,就可以做得非常相似。

相关问题 更多 >