解析日期字符串,省略年份

时间:2019-07-24 13:02:43

标签: python datetime

我得到了一系列日期字符串,格式为'July 24',即'%B %d'。我想解析这些字符串,使得年份对应于最近的日期,因此如果今天是2019年7月24日,则'July 24'应该解析为24/7/2019,而'July 25'应该解析为截至25/7/2018。我希望datetime模块可以做到这一点,但是它只是将年份设置为1900。

>>> from datetime import datetime
>>> datetime.strptime('July 24', '%B %d')                                            
datetime.datetime(1900, 7, 24, 0, 0)

是否有比按照我的规则手动解析日期更简单的方法?

2 个答案:

答案 0 :(得分:1)

可以单行完成,如果有更简单的方法,我也不会感到惊讶:

from datetime import datetime

today = datetime.today()
before = datetime.strptime('July 24', '%B %d')
print(before.replace(year=today.year if before.replace(year=1) <= today.replace(year=1) else today.year - 1))
after = datetime.strptime('July 25', '%B %d')
print(after.replace(year=today.year if after.replace(year=1) <= today.replace(year=1) else today.year - 1))

输出

2019-07-24 00:00:00
2018-07-25 00:00:00

当然可以通过不两次调用before.replace(或after.replace)来进行微优化,但是作为一个例子,这已经足够了。

答案 1 :(得分:0)

关于此问题的一件事是datetime.datetime的第一个位置参数是'year',这是创建它的实际实例所必需的。因此,如果您将类datetime.dateime导入为datetime并引用它的方法而没有先分配它的实例,那么您就依赖于datetime.datetime.year之类的属性的默认值。

这是一个函数,它接受格式为mydate的字符串"%B %d",并返回一个datetime属性为{{1}的year实例。 }(但将月份和日期保持不变),如果2019datetime.datetime.today().month == datetime.datetime.strptime(mydate, "%B %d").month,或者将datetime.datetime.today().day == datetime.datetime.strptime(mydate, "%B %d").day属性设置为2018的话。

您可以调用year来获取字符串,以便进一步执行该步骤,或者将其附加到此定义中。

strftime("%Y/%B/%d")
相关问题