如何修改Python代码实现5位及以上年份日期的星期查询
解决Python datetime支持5位及以上年份的问题
原代码的问题出在datetime.strptime的格式符%Y上——这个格式符仅匹配4位数字的年份,当传入5位及更长的年份时,strptime会把超出4位的部分当成未转换的剩余数据,从而抛出ValueError。
修改方案:直接拆分日期字符串构造日期对象
不需要依赖strptime的格式匹配,直接按空格拆分输入的日期字符串,将日、月、年分别转为整数后,用datetime.date构造对象即可,这种方式支持任意合法长度的年份(只要在Python datetime的支持范围内):
import datetime import calendar def findDay(date): # 按空格拆分日期,转换为整数类型的日、月、年 day, month, year = map(int, date.split()) # 构造日期对象 born_date = datetime.date(year, month, day) # 返回对应的星期名称 return calendar.day_name[born_date.weekday()] # 测试4位年份 print(findDay("01 01 2022")) # 输出: Saturday # 测试5位年份 print(findDay("01 01 20200")) # 输出: Wednesday
为什么原代码会报错?
原代码中datetime.datetime.strptime(date, '%d %m %Y')的%Y只能匹配4位数字,当传入"01 01 20200"时,strptime会读取2020作为年份,剩下的0无法匹配格式,因此触发ValueError: unconverted data remains: 0。
内容的提问来源于stack exchange,提问作者M1n3c4rt
相关产品推荐
相关产品推荐

