datetime.strptime 奇怪的行为
datetime.strptime strange behavior
我在 aws 虚拟机 运行 python 3.6.8 上遇到以下错误,而在我的笔记本电脑上它与 python 3.6.1[=12= 一起工作正常]
return datetime.strptime(date_str, self.date_format)
File "/usr/lib64/python3.6/_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/usr/lib64/python3.6/_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data 'Fri, 23 Aug 2019 20:24:46 IDT' does not match format '%a, %d %b %Y %H:%M:%S %Z'
我使用的格式有什么问题?
请参阅 this discussion 官方 Python 错误跟踪器。显然 %Z
仅支持 UTC
、GMT
和本地时区(由 time.tzname
返回)。
这是一个有趣的案例,official Python docs 具有误导性(说得好听一点):
%Z
Time zone name (empty string if the object is naive).(empty), UTC, EST, CST
这是错误的。 %Z
将仅识别 EST
、CST
等。如果它们是 OS 的本地时区。
编辑 好吧,文档中页面底部附近有一条注释说
%Z
If tzname(
) returns None
, %Z
is replaced by an empty string. Otherwise %Z
is replaced by the returned value, which must be a string.
仍然,不是很清楚。
说清楚:
它可以在您的本地计算机上运行,因为它使用 IDT 作为其本地时区,而 AWS 远程计算机则不然。
datetime.datetime.strptime("IDT", "%Z")
产生错误
ValueError: time data 'IDT' does not match format '%Z'
因为 %Z 不支持 IDT(以色列夏令时)。
解决方案取决于您接下来对数据执行的操作。如果您使用 pytz 并忽略要从中剥离时间的日期字符串的 'IDT' 部分,那么您可以在记录时区的同时进行存储。
dt = datetime.datetime.strptime("Fri, 23 Aug 2019 20:24:46", "%a, %d %b %Y %H:%M:%S")
print(dt)
2019-08-23 20:24:46
而
import pytz
idt = pytz.timezone('Israel')
dt_idt = dt.astimezone(idt)
print(dt_idt)
2019-08-23 22:24:46+03:00
更有用。
我在 aws 虚拟机 运行 python 3.6.8 上遇到以下错误,而在我的笔记本电脑上它与 python 3.6.1[=12= 一起工作正常]
return datetime.strptime(date_str, self.date_format)
File "/usr/lib64/python3.6/_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/usr/lib64/python3.6/_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data 'Fri, 23 Aug 2019 20:24:46 IDT' does not match format '%a, %d %b %Y %H:%M:%S %Z'
我使用的格式有什么问题?
请参阅 this discussion 官方 Python 错误跟踪器。显然 %Z
仅支持 UTC
、GMT
和本地时区(由 time.tzname
返回)。
这是一个有趣的案例,official Python docs 具有误导性(说得好听一点):
%Z Time zone name (empty string if the object is naive).(empty), UTC, EST, CST
这是错误的。 %Z
将仅识别 EST
、CST
等。如果它们是 OS 的本地时区。
编辑 好吧,文档中页面底部附近有一条注释说
%Z
Iftzname(
) returnsNone
,%Z
is replaced by an empty string. Otherwise%Z
is replaced by the returned value, which must be a string.
仍然,不是很清楚。
说清楚:
它可以在您的本地计算机上运行,因为它使用 IDT 作为其本地时区,而 AWS 远程计算机则不然。
datetime.datetime.strptime("IDT", "%Z")
产生错误
ValueError: time data 'IDT' does not match format '%Z'
因为 %Z 不支持 IDT(以色列夏令时)。
解决方案取决于您接下来对数据执行的操作。如果您使用 pytz 并忽略要从中剥离时间的日期字符串的 'IDT' 部分,那么您可以在记录时区的同时进行存储。
dt = datetime.datetime.strptime("Fri, 23 Aug 2019 20:24:46", "%a, %d %b %Y %H:%M:%S")
print(dt)
2019-08-23 20:24:46
而
import pytz
idt = pytz.timezone('Israel')
dt_idt = dt.astimezone(idt)
print(dt_idt)
2019-08-23 22:24:46+03:00
更有用。