比较Python中的日期 - 如何处理时区修饰符

Bla*_*ise 0 python datetime date python-2.7

我正在做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?我希望有一个更通用的解决方案然后硬编码的价值.

也许这很简单,任何提示?

Mar*_*ers 5

默认datetime模块不能很好地处理时区; 超出当前机器时区和UTC,它们基本上不受支持.

您必须使用外部库或手动处理时区偏移.

外部库选项:

  • 使用dateutil.parser可以处理您想要抛出的任何日期和/或时间格式:

    from dateutil import parser
    
    dt = parser.parse(s)
    
    Run Code Online (Sandbox Code Playgroud)
  • 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)
    
    Run Code Online (Sandbox Code Playgroud)

演示每种方法:

>>> 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())
Run Code Online (Sandbox Code Playgroud)