我有一个表示日期的字符串文本,我完全能够解析它并将其转换为一个干净的datetime对象:
date = "[24/Aug/2014:17:57:26"
dt = datetime.strptime(date, "[%d/%b/%Y:%H:%M:%S")
除了我不能使用指定的%z模式用时区捕捉整个日期字符串之外here
date_tz = 24/Aug/2014:17:57:26 +0200
dt = datetime.strptime(date, "[%d/%b/%Y:%H:%M:%S %z]")
>>> ValueError: 'z' is a bad directive in format '[%d/%b/%Y:%H:%M:%S %z]'
因为正如this bug report所说
strftime() is implemented per platform
我确定naive tzinfo指令'%Z'没有这样的问题
我可以通过使用dateutil模块将GST时间格式字符串转换为tzinfo对象[如这里所建议的][4]来完美地解决以下问题 然后插入tzinfo into datetime object
但由于我显然需要%z模式用于进一步的项目,我想找到一个解决方案,以避免这种解决方法,并使用外部模块来完成这个简单的任务。 你能建议我读一读吗?我本以为较新版本的python(我在2.7上)可以处理这个问题,但我现在不想为这个小而关键的细节更改我的版本。
好吧,看到评论让我重新制定了一个问题:如何使用strtime()解析电子邮件时区指示器,而不必知道区域设置时间?
^{} is implemented in pure Python 。与
strftime()
不同的是,[支持哪些指令]不依赖于平台。%z
受支持,因为Python 3.2:Python2.7中没有具体的时区实现。您可以很容易地实现UTC偏移解析,请参见How to parse dates with -0400 timezone string in python?
乌里的回答很好,救了我的命,但是当你
USE_TZ = True
您需要注意时间,因为如果将utc添加到返回中,最好避免出现警告“RuntimeWarning:DateTimeField”。在continue to@j-f-sebastians的答案中,这里有一个python 2.7的补丁
而不是使用:
使用
timedelta
来解释时区,如下所示:相关问题 更多 >
编程相关推荐