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

3

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

我熟悉python的time模块、strftime ()方法和strptime()方法。但是,我不确定上述日期格式称为什么,是否有python模块可用于转换这些非传统日期格式。

你有任何想法如何从这些非传统日期格式中获取%Y%M%D格式而不编写自己的计算器吗?

谢谢。


你的输入格式是什么? - namit
"自1900年01月01日起的天数"不是Excel日期。在Excel中将数字41213格式化为日期会产生2012-10-31,而不是2012-11-02。 - John Machin
6个回答

9
您可以尝试以下内容:

您可以尝试以下方法:

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日以来的天数。
这是一般的转换方法 - 不确定您的输入格式,但希望可以对其进行调整。

太棒了!我不知道 %j 参数。谢谢。 - ccdpowell

4
关于 Excel 整数到 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 日是第 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)

将时间差减去2是与Excel完美对齐的关键。这个答案比其他答案更准确,因此更受欢迎(尽管目前投票较低!)。 - jonathanjg

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位数字?),但一旦掌握了这部分内容,可以使用非常相似的方法进行操作。


0
from datetime import datetime 

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

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的答案以获取第二个。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接