首页 > 解决方案 > 如何解析没有零填充的日期,格式为(1 位或 2 位数字年份)-(月份缩写)?

问题描述

我需要解析一些大致格式为(1 或 2 位年份)-(月份缩写)的日期,例如:

5-6月(2005年6月)

13-1月(2013年1月)

我尝试将 strptime 与格式一起使用,%b-%y但它并没有始终如一地产生所需的日期。根据文档,这是因为我的数据集中的某些年份不是零填充的。

此外,当我在字符串“5-Jun”上测试日期时间模块(请参阅下面的代码)时,我得到了“2019-06-05”,而不是所需的结果(2005 年 6 月),即使我设置yearfirst=True了 when打电话parse

from dateutil.parser import parse
parsed = parse("5-Jun",yearfirst=True)
print(parsed)

标签: python

解决方案


如果将 0 填充到个位数年份会更容易,因为它可以使用格式直接转换为时间。此处使用正则表达式将单个数字的任何实例替换为“在前面填充的 0”值。我从这里使用了正则表达式。

示例代码:

import re
match_condn = r'\b([0-9])\b'
replace_str = r'0\1'
datetime.strptime(re.sub(match_condn, replace_str, '15-Jun'), '%y-%b').strftime("%B %Y")

输出:

June 2015

推荐阅读