Python中dateutil.parser解析年月为何返回非1号日期?
问题原因
dateutil.parser.parse 的默认逻辑是:当解析的日期字符串缺少某个字段(比如日、时、分)时,会从当前系统的日期/时间中提取对应缺失的字段值来填充。你传入的"September, 2023"只有年月,没有日,所以方法自动取了当前电脑日期的日数,这就是为什么修改系统日期的日数后,输出结果的日数也跟着变。
你看到的“默认返回当月1日”的描述应该是误解或者过时了,parse 方法的官方定义里,default 参数的默认值就是当前时间,缺失字段会从这里补全。
解决方案
如果需要强制解析结果为当月1日,可以通过 default 参数指定一个基准日期,把日部分固定为1:
from dateutil.parser import parse import datetime # 用日为1的基准日期填充缺失的日字段 print(parse("September, 2023", default=datetime.datetime(2023, 1, 1)))
输出结果会是:2023-09-01 00:00:00
如果想写得更通用,避免固定基准日期的年份,可以这样:
from dateutil.parser import parse import datetime # 创建一个日固定为1的基准日期,年月会被解析结果覆盖 base_date = datetime.datetime.today().replace(day=1, hour=0, minute=0, second=0, microsecond=0) print(parse("September, 2023", default=base_date))
内容的提问来源于stack exchange,提问作者Scravers
相关产品推荐
相关产品推荐

