Python中date.today()与datetime类型时间比较触发警告的问题
问题根因
你的判断是正确的:date.today() 返回值为 datetime.date 类型(仅存储年、月、日信息,不含时分秒),而你代码中的R_timer是pandas Timestamp类型(或datetime.datetime类型,包含完整年月日时分秒信息)。pandas新版本为了对齐Python标准库的类型校验逻辑,已经弃用了这两种跨时间类型的直接比较,后续版本会直接判定二者类型不匹配无法比较,因此弹出对应警告。
可直接复用的修复写法
- 写法1:按警告提示,将
date对象转为pandas时间戳后再比较,不会丢失时间精度
import pandas as pd from datetime import date R_timer = pd.Timestamp("2021-12-07 00:00:00") if pd.Timestamp(date.today()) >= R_timer: print('1')
- 写法2:将Timestamp类型的时间变量转为
date类型后比较,该写法会丢弃R_timer的时分秒部分,仅按年月日做判断
from datetime import date R_timer = pd.Timestamp("2021-12-07 00:00:00") if date.today() >= R_timer.date(): print('1')
- 写法3:如果业务逻辑需要对比精确到时分秒的时间,直接用
datetime.today()获取和R_timer同结构的datetime对象,从根源避免类型不匹配问题
from datetime import datetime # R_timer如果是原生datetime格式可以直接用这个写法 R_timer = datetime(2021, 12, 7, 0, 0, 0) if datetime.today() >= R_timer: print('1')
避坑提示
日常写时间相关逻辑时,尽量保证比较运算符两侧的时间类型完全一致,不要混用
datetime.date、datetime.datetime、pd.Timestamp三类对象。旧版本pandas对跨类型比较做了隐式转换,看似能正常运行,实际可能存在时分秒精度丢失、时区不匹配的隐性bug,版本升级后还会直接抛出类型错误。
内容的提问来源于stack exchange,提问作者JamieC113a
相关产品推荐
相关产品推荐

