如何将datetime.date转换为datetime.datetime实现日期比较?
问题说明
代码运行时分别得到datetime.date、datetime.datetime两类日期实例,直接执行比较逻辑会抛出cannot compare datetime.datetime to datetime.date错误;尝试用pd.to_datetime()做类型转换时,得到的是pandas自定义的Timestamp类型,并非目标原生datetime.datetime类型。
相关复现代码与输出:
start = df.index[0] start_input_1 = datetime.strptime(start_input[:10],'%Y-%m-%d') print(start_input[:10]) print(type(start)) print(type(start_input_1)) # 输出结果 # 2021-09-01 # <class 'datetime.date'> # <class 'datetime.datetime'> # 触发报错的比较逻辑 if start_input_1 >= start: start_plot = start_date_input_1
错误转换方式的输出:
start = pd.to_datetime(start) print(type(start)) # 输出:<class 'pandas._libs.tslibs.timestamps.Timestamp'>
实现方法
不需要依赖pandas,直接用Python标准库datetime的内置方法即可完成原生类型转换,两种常用方案如下:
- 方案1:将
datetime.date实例转为datetime.datetime实例
调用datetime.combine()方法,将日期对象和指定的时间对象拼接为完整的datetime对象,通常默认取当日0点即可:
转换后from datetime import datetime # start为原datetime.date类型实例 start = datetime.combine(start, datetime.min.time())start的类型为标准datetime.datetime,时间部分为00:00:00,可直接和其他datetime实例做大小比较。 - 方案2:统一对比维度,无需转datetime
如果比较逻辑不需要考虑时分秒精度,直接把参与对比的datetime实例转为date类型即可,两边类型一致就不会触发报错:# 取datetime的日期部分做对比 if start_input_1.date() >= start: start_plot = start_date_input_1
提示:
pd.to_datetime()是pandas库的日期处理方法,默认返回pandas自定义的Timestamp类型,即便后续调用.to_pydatetime()可以转回原生datetime,也属于冗余引入依赖的写法,处理原生Python日期类型时不推荐使用。
内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

