转换日期格式不寻常的日期格式-提取%Y%M%D



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

  • 1900年1月1日以来的天数- ex: 41213 -我相信这些来自Excel http://www.kirix.com/stratablog/jd-edwards-date-conversions-cyyddd
  • YYDayofyear - ex 2012265

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

有没有人知道如何从这些不寻常的日期格式中获得%Y%M%D格式,而无需编写自己的计算器?

谢谢。

您可以尝试如下操作:

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整数转换为Python日期时间位:

注意有两个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系统中,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)

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

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位数字?),但是一旦您了解了这一部分,它可以非常相似地完成。

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

我觉得是timedelta。

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

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

编辑:参见%j的答案

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

最新更新