在Python中比较日期不按预期工作
问题描述:
我想比较从csv文件中提取的日期到当前日期,以检查差异是否大于七天。这里是我的代码:在Python中比较日期不按预期工作
with open (path) as csvfile:
readcsv = csv.reader(csvfile, delimiter = ',')
for row in readcsv:
iso_ts = str(row[3])
datum = (datetime.datetime.strptime(''.join(iso_ts.rsplit(':', 1)), '%Y-%m-%dT%H:%M:%S%z'))
current_time = (datetime.datetime.strptime(datetime.datetime.now(),'%Y-%m-%dT%H:%M:%S%z'))
甚至没有比较这些我收到以下错误
File "./netapp.py", line 32, in <module>
current_time = (datetime.datetime.strptime(datetime.datetime.now(),'%Y-%m-%dT%H:%M:%S%z'))
TypeError: must be str, not datetime.datetime
我想检查一下,如果从CSV传来的数据是7天以上,以当前日期然后做点什么。我知道这些日期中的任何一个的格式都存在一些问题,但我似乎无法弄清楚它究竟是什么。我将非常感谢关于我失踪的解释。
答
datetime.strptime()
需要date_string
和format
字符串并将日期字符串参数转换为datetime
对象。我不认为你需要转换任何东西,你应该能够使用timedelta
对象比较datum
到datetime.datetime.now()
。
当心,.now()
返回一个表示本地时间的天真datetime
对象。当地时间可能不明确 - 不要将其用于比较。我在格式字符串中看到%z
(utc偏移量); .strptime()
returns a timezone-aware datetime
object on Python 3。你不能比较天真和意识的日期时间对象。使用.now(timezone.utc)
创建可用于比较的时区感知当前时间。请参阅Find if 24 hrs have passed between datetimes - Python
谢谢,现在工作 – scriptkiddie
@scriptkiddie:beware,'.now()'返回一个天真的日期时间对象,表示当地时间。当地时间可能不明确 - 不要将其用于比较。我在格式字符串中看到'%z'(utc偏移量); ['.strptime()'在Python 3上返回一个可识别时区的日期时间对象](http://stackoverflow.com/q/12281975/4279)。你不能比较天真和意识的日期时间对象。使用'.now(timezone.utc)'创建一个可用于比较的时区感知当前时间。看[如果24小时之间已经通过日期时间之间传递 - Python](http://stackoverflow.com/q/26313520/4279) – jfs
@ J.F.Sebastian你介意,如果我把它作为一个编辑在我的答案?我认为这是一个很好的陷阱。 – wpercy