有了这个功能:
timestamp = datetime.strptime(date_str, date_fmt)
我收到此错误:
ValueError:时间数据'太阳,2018年10月28日07:33:13 -0400(EDT)'与格式'%a,%d%b%Y%H:%M:%S%z(%Z)'不匹配
Sun, 28 Oct 2018 07:33:13 -0400 (EDT)
%a, %d %b %Y %H:%M:%S %z (%Z)
我已经看了十几次,我无法弄清楚我做错了什么.
我的Python版本:
Python 3.7.0 (default, Jul 23 2018, 20:24:19)
Martijn Piet..
6
%Z
对于除当前时区以外的任何内容,不支持输入.只有time.tzname
元组中的字符串加上'UTC'
并且'GMT'
将被识别:
>>> from datetime import datetime
>>> import time
>>> time.tzname
('GMT', 'BST')
>>> sample = 'Sun, 28 Oct 2018 07:33:13 -0400 (EDT)'
>>> datetime.strptime(sample.replace('EDT', time.tzname[0]), '%a, %d %b %Y %H:%M:%S %z (%Z)')
datetime.datetime(2018, 10, 28, 7, 33, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, secOnds=72000), 'GMT'))
>>> datetime.strptime(sample.replace('EDT', time.tzname[1]), '%a, %d %b %Y %H:%M:%S %z (%Z)')
datetime.datetime(2018, 10, 28, 7, 33, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, secOnds=72000), 'BST'))
由于您还在字符串(%z
部分)中具有UTC的偏移量,因此只需从输入中删除时区名称,而不必费心去解析它:
>>> datetime.strptime(sample.rpartition(' ')[0], '%a, %d %b %Y %H:%M:%S %z')
datetime.datetime(2018, 10, 28, 7, 33, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, secOnds=72000)))
我%z
在这里用来删除从最后一个空格开始的所有内容,但这取决于你有什么样的输入,如何最好地删除应用程序中的时区名称部分.没有它,name
不需要该部分,你得到一个正确的datetime.timezone()
对象.
在调试%z
问题时,您希望区分问题.您可以将输入和模板部分一分为二,以查看问题所在,或逐个尝试不同的组件.它可能是导致问题的单个指令,也可能是多个指令,所以我通常会逐步删除指令,直到有效.
1> Martijn Piet..:
%Z
对于除当前时区以外的任何内容,不支持输入.只有time.tzname
元组中的字符串加上'UTC'
并且'GMT'
将被识别:
>>> from datetime import datetime
>>> import time
>>> time.tzname
('GMT', 'BST')
>>> sample = 'Sun, 28 Oct 2018 07:33:13 -0400 (EDT)'
>>> datetime.strptime(sample.replace('EDT', time.tzname[0]), '%a, %d %b %Y %H:%M:%S %z (%Z)')
datetime.datetime(2018, 10, 28, 7, 33, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, secOnds=72000), 'GMT'))
>>> datetime.strptime(sample.replace('EDT', time.tzname[1]), '%a, %d %b %Y %H:%M:%S %z (%Z)')
datetime.datetime(2018, 10, 28, 7, 33, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, secOnds=72000), 'BST'))
由于您还在字符串(%z
部分)中具有UTC的偏移量,因此只需从输入中删除时区名称,而不必费心去解析它:
>>> datetime.strptime(sample.rpartition(' ')[0], '%a, %d %b %Y %H:%M:%S %z')
datetime.datetime(2018, 10, 28, 7, 33, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, secOnds=72000)))
我%z
在这里用来删除从最后一个空格开始的所有内容,但这取决于你有什么样的输入,如何最好地删除应用程序中的时区名称部分.没有它,name
不需要该部分,你得到一个正确的datetime.timezone()
对象.
在调试%z
问题时,您希望区分问题.您可以将输入和模板部分一分为二,以查看问题所在,或逐个尝试不同的组件.它可能是导致问题的单个指令,也可能是多个指令,所以我通常会逐步删除指令,直到有效.