我正在创建简单的RSS阅读器。在newest_entry_datetime
中存储上次阅读的最新条目的日期,然后在再次阅读频道时,我将newest_entry_datetime
的输入时间与<
符号进行比较,因为我读到Python足够智能识别和比较日期时间
它在时间部分发生变化的同一天工作但在第二天最新的日期实现为旧。
import datetime
import locale
#locale.setlocale(locale.LC_ALL, 'English_United States.1252')
newest_entry_datetime = 'Thu, 21 Dec 2017 16:02:03 CET'
entry_published = 'Fri, 22 Dec 2017 08:19:15 CET'
#dt_newest = datetime.datetime.strptime (newest_entry_datetime, "%a, %d %b %Y %H:%M:%S %Z" )
if (entry_published <= newest_entry_datetime):
print('Entry date is older')
else:
print('Entry date is NEW')
使用这样的代码我得到结果:"Entry date is older"
这是错误的。
第二个想法是将日期戳转换为日期时间,但我得到了:
ValueError: time data 'Thu, 21 Dec 2017 16:02:03 CET' does not match format '%a, %d %b %Y %H:%M:%S %Z'
即使我将语言环境更改为美国。
不知道如何正确地做到这一点。你能帮忙吗?
答案 0 :(得分:1)
如果您在转换为datetime之前比较“日期” - 则比较字符串。首先,您需要转换为datetime(如果current不支持您的字符串日期时间样式,则使用正确的格式),之后您可以比较两个datetime对象。 由于'CET',您无法将datetime转换为此格式,对于时区,您可以自定义desicion(like this)。
答案 1 :(得分:1)
感谢Anton vBR回答CET无法识别我刚删除了这部分字符串,因为Feed总是有相同的时区。
最终的代码可以正常运行并提供正确的结果。
import datetime
import locale
locale.setlocale(locale.LC_ALL, 'English_United States.1252')
newest_entry_datetime = 'Thu, 21 Dec 2017 16:02:03 CET'
entry_published = 'Fri, 22 Dec 2017 08:19:15 CET'
newest_entry_datetime = newest_entry_datetime.rsplit(" ", maxsplit=1)[0]
entry_published = entry_published.rsplit(" ", maxsplit=1)[0]
dt_newest = datetime.datetime.strptime (newest_entry_datetime, "%a, %d %b %Y %H:%M:%S" )
st_entry = datetime.datetime.strptime (entry_published, "%a, %d %b %Y %H:%M:%S" )
if (st_entry <= dt_newest):
print('Entry date is older')
else:
print('Entry date is NEW')
结果是:'输入日期是新的',正如预期的那样。