如何使用Python修改时间实例的日期(保留时间部分)
最优实现方法
核心思路是先将时间字符串转为datetime对象,通过日期时间对象的属性/方法修改日期,最后再转回字符串,完全避免字符串拆分的繁琐和格式风险。
方法1:直接替换日期字段
如果明确要设置的年、月、日,直接用replace()方法修改datetime对象的对应属性(注意:datetime对象不可变,replace()会返回新对象):
from datetime import datetime start_time_str = '2022-12-21 22:00:00' # 转成datetime对象 start_time = datetime.strptime(start_time_str, '%Y-%m-%d %H:%M:%S') # 修改为指定日期,保留原时间 new_start_time = start_time.replace(year=2022, month=12, day=28) # 跨年月修改示例 new_start_time = start_time.replace(year=2023, month=1, day=1) # 转回字符串格式 new_start_time_str = new_start_time.strftime('%Y-%m-%d %H:%M:%S') print(new_start_time_str) # 输出:2023-01-01 22:00:00
方法2:合并指定日期与原时间
如果已有目标日期的datetime对象,用datetime.combine()方法将目标日期的日期部分和原时间的时间部分合并:
from datetime import datetime start_time_str = '2022-12-21 22:00:00' start_time = datetime.strptime(start_time_str, '%Y-%m-%d %H:%M:%S') # 直接创建目标日期的datetime对象(替代你代码里的错误初始化方式) replacing_date = datetime(2022, 12, 28) # 合并日期与原时间 new_start_time = datetime.combine(replacing_date.date(), start_time.time()) # 转回字符串格式 new_start_time_str = new_start_time.strftime('%Y-%m-%d %H:%M:%S') print(new_start_time_str) # 输出:2022-12-28 22:00:00
方法优势
- 基于
datetime对象操作,不受字符串格式细微变化影响(只要初始化时格式串匹配即可) - 自动处理跨年月的日期逻辑,无需手动计算月份天数、跨年等问题
- 代码简洁易读,维护成本低
内容的提问来源于stack exchange,提问作者Ahmed Yasin
相关产品推荐
相关产品推荐

