简单的问题。我有一个格式如下的字符串:
2012-04-30 23:59:01 EDT
我想将其转换为符合 apache 日志的日期格式:
[30/Apr/2012:23:59:01 +0300]
我非常确定以下代码(使用日期时间)可以工作:
time0 = '2012-04-30 23:59:01 EDT'
time1 = datetime.strptime(time0,'%Y-%m-%d %H:%M:%S %Z')
time2 = datetime.strftime(time1,'[%d/%b/%Y:%H:%M:%S %z]')
但是如果我打印上面的三个变量,time1和time2的内容并不符合预期。更具体地说,EDT 似乎没有被正确解析。
time0 = 2012-04-30 23:59:01 EDT
time1 = 2012-04-30 23:59:01
time2 = [30/Apr/2012:23:59:01 ]
最佳答案
Python 的 datetime
(尤其是 strptime
)因时区问题而臭名昭著。您通常需要使用另一个库(例如 pytz 或类似的库)加载时区信息。
如果可以的话,请使用python-dateutil用于日期解析。我认为它要容易得多,并且内置了所有时区和 DST 内容。
from dateutil import parser
time1 = parser.parse('2012-04-30 23:59:01 EDT', tzinfos={'EDT' : +18000})
datetime.strftime(time1,'[%d/%b/%Y:%H:%M:%S %z]')
关于Python 日期字符串转换为类似 apache 的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914633/