将字符串转换为带有毫秒和时区的日期时间 - Python

cyb*_*ron 4 python

我有以下 python 片段:

from datetime import datetime

timestamp = '05/Jan/2015:17:47:59:000-0800'
datetime_object = datetime.strptime(timestamp, '%d/%m/%y:%H:%M:%S:%f-%Z')
print datetime_object
Run Code Online (Sandbox Code Playgroud)

但是,当我执行代码时,出现以下错误:

ValueError: time data '05/Jan/2015:17:47:59:000-0800' does not match format '%d/%m/%y:%H:%M:%S:%f-%Z'
Run Code Online (Sandbox Code Playgroud)

我的匹配表达式有什么问题?

Res*_*ACK 6

编辑2:根据这篇文章strptime不支持%z(尽管文档建议)。为了解决这个问题,你可以忽略时区调整吗?:

from datetime import datetime

timestamp = '05/Jan/2015:17:47:59:000-0800'
# only take the first 24 characters of `timestamp` by using [:24]
dt_object = datetime.strptime(timestamp[:24], '%d/%b/%Y:%H:%M:%S:%f')
print(dt_object)
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

$ python date.py
2015-01-05 17:47:59
Run Code Online (Sandbox Code Playgroud)

编辑:你的datetime.strptime论点应该是'%d/%b/%Y:%H:%M:%S:%f-%z'

strptime(),%y指的是

不带世纪的年份作为补零十进制数

01, 99, 等.

如果您想使用完整的 4 位数年份,则需要使用%Y

同样,如果您想使用 3 个字母的月份,则需要使用%b,而不是%m

我没有查看字符串的其余部分,但可能还有更多不匹配的地方。您可以在https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior了解如何在表中定义每个部分