Yar*_*lav 23 python datetime python-3.x
我datetime
从电子邮件中获取对象,然后尝试将其与datetime.now()
.
然后我看到这个错误:
datetime.now() > datetime.strptime('Fri, 31 Jan 2020 09:59:34 +0000 (UTC)', "%a, %d %b %Y %H:%M:%S %z (%Z)"
TypeError: can't compare offset-naive and offset-aware datetimes
Run Code Online (Sandbox Code Playgroud)
怎么解决呢?
mac*_*etw 24
在许多情况下,您不想转换任何时区信息。为了防止这种情况,只需将日期时间对象转换为比较器两侧的浮点数即可。使用该datetime.timestamp()
功能。
dateutil.parser.parse().
我还建议您使用It's easy to read来简化日期解析。
在您的示例中,您可以像这样比较数据:
compare_date = 'Fri, 31 Jan 2020 09:59:34 +0000 (UTC)'
datetime.now().timestamp() > parse(compare_date).timestamp()
Run Code Online (Sandbox Code Playgroud)
小智 8
每当您将原始偏移(datetime.now()
无时区信息)与偏移感知 (UTC) 时间进行比较时,就会发生这种情况。默认情况下,Python 对时区的支持很差。即使您过去datetime.utcnow()
在技术上进行比较,也只是返回 UTC 时间,但仍然有一个简单的时区。
我的建议是安装该pytz
软件包并执行以下操作:
import pytz
datetime.now().replace(tzinfo=pytz.UTC) > \
datetime.strptime('Fri, 31 Jan 2020 09:59:34 +0000 (UTC)',
"%a, %d %b %Y %H:%M:%S %z (%Z)")
Run Code Online (Sandbox Code Playgroud)
有关进一步参考,请参阅:https://docs.python.org/3/library/datetime.html#datetime.datetime.utcnow
小智 8
正如文档datetime
中所述,date
对象被分类为 \xe2\x80\x9caware\xe2\x80 \time
x9d 或 \xe2\x80\x9cnaive\xe2\x80\x9d,具体取决于它们是否包含时区信息。
datetime.datetime.now()
要将您从天真更新为有意识,您可以使用datetime.timezone.utc
.
我还建议您使用dateutil.parser
将通用日期/时间字符串解析为datetime.datetime
对象。
以下是您可以执行的操作的示例:
\nfrom datetime import datetime, timezone\nfrom dateutil import parser\n\ndatetime.now(timezone.utc) > parser.parse(\'Fri, 31 Jan 2020 09:59:34 +0000 (UTC)\')\n
Run Code Online (Sandbox Code Playgroud)\n请参阅文档datetime.timezone
和文档以获取dateutil.parser
更多信息。
归档时间: |
|
查看次数: |
41407 次 |
最近记录: |