Python中如何将date类型转换为不带时间部分的datetime类型
Python date对象转无时间部分datetime实现方案
问题说明
现有遍历指定年月所有自然日的代码,生成的对象为date类型,需要转换为datetime类型,且不需要附带有效时间部分。
原有参考代码如下(缺少依赖导入,直接运行会报错):
def func(y, m): for i in range(1, calendar.monthrange(y, m)[1]+1): th_date = date(y, m, i) print(th_date) func(2020,4)
实现方式
使用datetime.combine()方法完成转换,将已有date对象与time.min(对应00:00:00)组合,得到的就是对应日期零点的datetime对象,无额外有效时间信息,完全符合需求。
修正后可直接运行的完整代码:
import calendar from datetime import date, datetime, time def func(y, m): for i in range(1, calendar.monthrange(y, m)[1] + 1): th_date = date(y, m, i) # 转换为无有效时间部分的datetime对象 th_datetime = datetime.combine(th_date, time.min) print(th_datetime) func(2020, 4)
其他可选方案
- 如果不需要单独生成
date对象,可以直接在循环中构造datetime实例:th_datetime = datetime(y, m, i),运行效果和上述转换逻辑完全一致,代码更简洁。 - 也可以通过日期序值转换:
th_datetime = datetime.fromordinal(th_date.toordinal()),效果相同,但写法可读性弱于combine方法,不推荐优先使用。
效果说明
转换后的对象为标准datetime类型,打印输出格式为2020-04-01 00:00:00,可直接用于时间计算、数据库字段写入等所有需要datetime类型的场景,不会携带多余的时间参数。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

