问题是:
我将在Python 2.6中解析一个日志文件。在将common log日期字符串解析为时间对象时出现问题:
13/Sep/2012:06:27:18 +0200
我已经尝试过的东西
使用dateutils.parser.parse
我已经尝试使用dateutils.parser.parse
,但它无法解析它,出现以下错误:
ValueError: unknown string format
使用time.strptime
我尝试使用格式字符串%d/%b/%Y:%H:%M:%S %z
的time.strptime
,但在解析时区时遇到了问题:
ValueError: 'z' is a bad directive in format '%d/%b/%Y:%H:%M:%S %z'
有人知道错误在哪里吗?或者这只是一种错误的方法?
最终解决方案
最后,我决定使用time.strptime
,去掉时区信息:
time.strptime(datestring[:-6], '%d/%b/%Y:%H:%M:%S')
不想使用dateutils
的原因是dateutils
比strptime
(实际上是调用C函数)慢得多。
发布于 2012-09-17 22:37:35
这是我所看到的:
dateutil
不喜欢将时间附加到日期后面(请参见this question))您的底层C实现不支持
%z
指令一个快速而简单的解决方案(尽管不是很优雅):
>>> s = '13/Sep/2012:06:27:18 +0200'
>>> dateutil.parser.parse(s.replace(':', ' ', 1))
datetime.datetime(2012, 9, 13, 6, 27, 18, tzinfo=tzoffset(None, 7200))
提醒一下,replace
的第三个可选参数是max replacement count。
https://stackoverflow.com/questions/12461449
复制相似问题