Python: 日期时间格式

Python: datetime format

我有以下日期时间字符串:

Mon Oct 27 23:00:03 +0000 2014

我想将此字符串转换为可以比较日期时间的形式。所以,我尝试的第一件事是将其转换为 Python.

中的 datetime

我在正确设置格式时遇到问题。我已经关注了the documentation,但是没有用

我试过以下方法:

str = 'Mon Oct 27 23:00:03 +0000 2014'
datetime.strptime(str, '%a %b %d %X %Z %Y')

我怎样才能让它工作?

如果您想将其转换为 datetime 对象,您可以使用库 python-dateutil

例如:

In [6]: dateutil.parser.parse('Mon Oct 27 23:00:03 +0000 2014')
Out[6]: datetime.datetime(2014, 10, 27, 23, 0, 3, tzinfo=tzutc())

在 Python 3.2+:

>>> from datetime import datetime
>>> timestr = 'Mon Oct 27 23:00:03 +0000 2014'
>>> datetime.strptime(timestr, '%a %b %d %X %z %Y')
datetime.datetime(2014, 10, 27, 23, 0, 3, tzinfo=datetime.timezone.utc)

注意小写的 %z。

您的问题在于您的 %z UTC 偏移值(您应该使用小写的 z)。然而,

%z is only supported in Python 3.2+

如果您坚持使用旧版本的 Python,您可以从字符串中取出 UTC 偏移量,然后在转换其余部分后尝试转换它

这是适用于 Python 2 和 3 的仅标准库版本:

#!/usr/bin/env python
from datetime import datetime
from email.utils import parsedate_tz, mktime_tz

timestamp = mktime_tz(parsedate_tz('Mon Oct 27 23:00:03 +0000 2014'))
utc_dt = datetime.utcfromtimestamp(timestamp)
# -> datetime.datetime(2014, 10, 27, 23, 0, 3)

其中 utc_dt 是一个日期时间对象,表示 UTC 时区的时间(与输入时区无关)。

注意:它不支持代表闰秒的时间(尽管 datetime 对象无论如何也不能代表它):

>>> datetime.utcfromtimestamp(mktime_tz(parsedate_tz('Tue June 30 23:59:60 +0000 2015')))
datetime.datetime(2015, 7, 1, 0, 0)