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

时间:2013-01-11 04:41:04

标签: python date strftime strptime

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

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

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

感谢。

6 个答案:

答案 0 :(得分:8)

您可以尝试以下内容:

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日以来的天数。

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

答案 1 :(得分:2)

这两种格式似乎都非常简单易用。事实上,第一个只是一个整数,那你为什么不这样做呢?

import datetime

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

对于第二个,详细信息取决于格式的确切定义(例如,即使天数小于100,或者有可能有2或1,您是否总能指望一年后的3位数? - 如果是这样,年份总是4位数?)但是一旦你得到那个部分就可以完全相同。

答案 2 :(得分:1)

在Excel整数到Python日期时间位:

请注意,有两个Excel日期系统(一个基于1-Jan-1900,另一个基于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日是第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)

答案 3 :(得分:0)

根据http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior ,一年中的某一天是“%j”,而第一种情况可以通过toordinal()和fromordinal()来解决:date.fromordinal(date(1900, 1, 1).toordinal() + x)

答案 4 :(得分:0)

我认为timedelta。

import datetime
d = datetime.timedelta(days=41213)
start = datetime.datetime(year=1900, month=1, day=1)
the_date = start + d

对于第二个,您可以2012265[:4]获得年份并使用相同的方法。

编辑:第二次使用%j查看答案。

答案 5 :(得分:0)

from datetime import datetime 

df(['timeelapsed'])=(pd.to_datetime(df['timeelapsed'], format='%H:%M:%S') - datetime(1900, 1, 1)).dt.total_seconds()