我正在做 Python 日期比较:
假设我有这样的日期:'Fri Aug 17 12:34:00 2012 +0000'
我以以下方式解析它:
dt=datetime.strptime('Fri Aug 17 12:34:00 2012 +0000', '%a %b %d %H:%M:%S %Y +0000')
我在文档页面上找不到如何处理剩余的+0000
?我想要一个更通用的解决方案,然后是硬编码的值。
也许这很容易,有什么提示吗?
我正在做 Python 日期比较:
假设我有这样的日期:'Fri Aug 17 12:34:00 2012 +0000'
我以以下方式解析它:
dt=datetime.strptime('Fri Aug 17 12:34:00 2012 +0000', '%a %b %d %H:%M:%S %Y +0000')
我在文档页面上找不到如何处理剩余的+0000
?我想要一个更通用的解决方案,然后是硬编码的值。
也许这很容易,有什么提示吗?
默认datetime
模块不能很好地处理时区;在您当前的机器时区和 UTC 之外,它们基本上不受支持。
您必须为此使用外部库或手动处理时区偏移量。
外部库选项:
Usedateutil.parser
可以处理您想扔给它的几乎任何日期和/或时间格式:
from dateutil import parser
dt = parser.parse(s)
该iso8601
库仅处理 ISO 8601 格式,其中包括相同形式的时区偏移:
import iso8601
datetimetext, tz = s.rsplit(None, 1) # only grab the timezone portion.
timezone = iso8601.iso8601.parse_timezone('{}:{}'.format(tz[:3], tz[3:]))
dt = datetime.strptime(datetimetext, '%a %b %d %H:%M:%S %Y').replace(tzinfo=timezone)
每种方法的演示:
>>> import datetime
>>> s = 'Fri Aug 17 12:34:00 2012 +0000'
>>> import iso8601
>>> timezone = iso8601.iso8601.parse_timezone('{}:{}'.format(tz[:3], tz[3:]))
>>> datetime.datetime.strptime(datetimetext, '%a %b %d %H:%M:%S %Y').replace(tzinfo=timezone)
datetime.datetime(2012, 8, 17, 12, 34, tzinfo=<FixedOffset '+00:00'>)
>>> from dateutil import parser
>>> parser.parse(s)
datetime.datetime(2012, 8, 17, 12, 34, tzinfo=tzutc())
您可能还想看看Delorean。这是两者的包装pytz
,dateutil
它提供时区操作以及简单的日期时间时区转换。
以下是我将如何使用 Delorean 解决您的问题。
>>> from delorean import parse
>>> parse("2011/01/01 00:00:00 -0700")
Delorean(datetime=2011-01-01 07:00:00+00:00, timezone=UTC)
从那里您可以通过简单地返回.datetime
属性来返回日期时间。如果你想做一些时间转换,只需使用 Delorean 对象并做.shift("UTC")
等。
使用dateutil.parser
:
>>> import dateutil.parser
>>> dateutil.parser.parse('Fri Aug 17 12:34:00 2012 +0000')
>>> datetime.datetime(2012, 8, 17, 12, 34, tzinfo=tzutc())