我得到了一系列日期字符串,格式为'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)
是否有比按照我的规则手动解析日期更简单的方法?
答案 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
实例。 }(但将月份和日期保持不变),如果2019
和datetime.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")