Python中判断日期是否含年份并统一转为指定格式的方法
解决方案
可以使用Python的datetime模块来处理这两种日期格式,以下是两种实用实现方式:
方式一:手动指定格式解析(无需第三方库)
这种方式明确匹配两种目标格式,逻辑清晰且不需要额外安装依赖:
from datetime import datetime def standardize_date(date_str): # 先尝试解析带年份的日-月-年格式(如"2-4-2023") try: dt_obj = datetime.strptime(date_str, "%d-%m-%Y") except ValueError: # 解析失败则处理无年份的英文月.日格式(如"Mar.30") dt_obj = datetime.strptime(date_str, "%b.%d") # 追加当前年份 current_year = datetime.now().year dt_obj = dt_obj.replace(year=current_year) # 格式化为目标格式:年-两位数字月-两位数字日 return dt_obj.strftime("%Y-%m-%d") # 测试示例 d1 = "Mar.30" d2 = "2-4-2023" print(f'd1 = "{standardize_date(d1)}"') print(f'd2 = "{standardize_date(d2)}"')
执行后输出:
d1 = "2023-03-30" d2 = "2023-04-02"
方式二:自动识别格式(需第三方库)
如果需要兼容更多未知日期格式,可以使用python-dateutil库的parser模块自动识别,代码更简洁:
- 先安装依赖:
pip install python-dateutil
- 实现代码:
from datetime import datetime from dateutil import parser def standardize_date(date_str): dt_obj = parser.parse(date_str) # 若解析出的年份为默认值(无年份时parser会填充1900),替换为当前年份 if dt_obj.year == 1900: dt_obj = dt_obj.replace(year=datetime.now().year) return dt_obj.strftime("%Y-%m-%d") # 测试示例 d1 = "Mar.30" d2 = "2-4-2023" print(f'd1 = "{standardize_date(d1)}"') print(f'd2 = "{standardize_date(d2)}"')
执行后同样会得到符合预期的输出。
内容的提问来源于stack exchange,提问作者pp45
相关产品推荐
相关产品推荐

