热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我的datetime.strptime格式有什么问题?

如何解决《我的datetime.strptime格式有什么问题?》经验,为你挑选了1个好方法。

有了这个功能:

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问题时,您希望区分问题.您可以将输入和模板部分一分为二,以查看问题所在,或逐个尝试不同的组件.它可能是导致问题的单个指令,也可能是多个指令,所以我通常会逐步删除指令,直到有效.


推荐阅读
author-avatar
笨小孩2502894737
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有