Нет поддержки %Z
на входе для чего-либо, кроме вашего текущего часового пояса .Только строки в time.tzname
кортеже плюс 'UTC'
и 'GMT'
будут когда-либо распознаваться:
>>> from datetime import datetime
>>> import time
>>> time.tzname
('GMT', 'BST')
>>> sample = 'Sun, 28 Oct 2018 07:33:13 -0400 (EDT)'
>>> datetime.strptime(sample.replace('EDT', time.tzname[0]), '%a, %d %b %Y %H:%M:%S %z (%Z)')
datetime.datetime(2018, 10, 28, 7, 33, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000), 'GMT'))
>>> datetime.strptime(sample.replace('EDT', time.tzname[1]), '%a, %d %b %Y %H:%M:%S %z (%Z)')
datetime.datetime(2018, 10, 28, 7, 33, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000), 'BST'))
Поскольку у вас также есть смещение от UTC в строке (-0400
часть), просто удалите название часового пояса из вашего ввода и не пытайтесь его проанализировать:
>>> datetime.strptime(sample.rpartition(' ')[0], '%a, %d %b %Y %H:%M:%S %z')
datetime.datetime(2018, 10, 28, 7, 33, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)))
Я использовал str.rpartition()
здесь, чтобы удалить все, начиная споследний пробел, но это зависит от того, какие входные данные у вас есть, как наилучшим образом удалить часть имени часового пояса в вашем приложении.Без этого секция (%Z)
не нужна, и вы получаете правильный объект datetime
.
При отладке datetime.strptime()
проблем вы хотите разделить проблему.Вы можете разделить входные данные и части шаблона, чтобы увидеть, в чем заключается проблема, или попробовать разные компоненты один за другим.Это может быть одна директива, которая вызывает проблему, или множественная, поэтому я обычно использую пошаговое удаление директив до тех пор, пока одна из них не сработает.