Converting string with UTC offset to a datetime ob

2019-01-01 07:11发布

问题:

This question already has an answer here:

  • Parsing date with timezone from an email? 8 answers

Given this string: \"Fri, 09 Apr 2010 14:10:50 +0000\" how does one convert it to a datetime object?

After doing some reading I feel like this should work, but it doesn\'t...

>>> from datetime import datetime
>>>
>>> str = \'Fri, 09 Apr 2010 14:10:50 +0000\'
>>> fmt = \'%a, %d %b %Y %H:%M:%S %z\'
>>> datetime.strptime(str, fmt)
Traceback (most recent call last):
  File \"<stdin>\", line 1, in <module>
  File \"/usr/lib64/python2.6/_strptime.py\", line 317, in _strptime
    (bad_directive, format))
ValueError: \'z\' is a bad directive in format \'%a, %d %b %Y %H:%M:%S %z\'

It should be noted that this works without a problem:

>>> from datetime import datetime
>>>
>>> str = \'Fri, 09 Apr 2010 14:10:50\'
>>> fmt = \'%a, %d %b %Y %H:%M:%S\'
>>> datetime.strptime(str, fmt)
datetime.datetime(2010, 4, 9, 14, 10, 50)

But I\'m stuck with \"Fri, 09 Apr 2010 14:10:50 +0000\". I would prefer to convert exactly that without changing (or slicing) it in any way.

回答1:

It looks as if strptime doesn\'t always support %z. Python appears to just call the C function, and strptime doesn\'t support %z on your platform.

Note: from Python 3.2 onwards it will always work.