【发布时间】:2014-11-27 17:27:49
【问题描述】:
使用 datetime.strptime() 的 '%z' 模式
我有一个代表日期的字符串文本,我完全能够解析它并将其转换为一个干净的日期时间对象:
date = "[24/Aug/2014:17:57:26"
dt = datetime.strptime(date, "[%d/%b/%Y:%H:%M:%S")
除了我无法使用指定的 %z 模式 捕获带有 timezone 的整个日期字符串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() 按平台实现
我确切地说,天真的 tzinfo 指令“%Z”没有这样的问题
解决方法:将 tzinfo 字符串转换为 tzinfo 对象
我可以通过使用dateutil 模块将 GST 时间格式字符串转换为 tzinfo 对象 [如这里建议的那样][4] 来完美地做出以下解决方法 然后插入tzinfo into datetime object
问题:让 %z 可用于我的平台?
但是由于我显然需要 %z 模式来进行进一步的项目,所以我想找到一个解决方案来避免这种变通方法并使用外部模块来完成这个简单的任务。 你能建议我读一下吗?我认为较新版本的 python(我在 2.7 上)可以处理它,但我宁愿现在不更改我的版本,因为这个小但至关重要的细节。
[编辑]
好吧,看到 cmets 让我重新提出了我的问题,即如何使用 strptime() 解析电子邮件时区指示器而不知道语言环境时间?
【问题讨论】:
-
如果 Python 所依赖的底层 C 库不支持它,你就不会得到它。
-
所以我想我别无选择,每次都做这种丑陋且低效的解决方法?
-
我不知道有什么方法可以做到这一点,而且我确信这个问题之前已经被问过了。
-
对于时区的东西,你可能想看看
pytz-> pytz.sourceforge.net