2016-04-22 3 views
1

При использованииСинтаксические длинная строка в DateTime

import datetime 
s = 'Sat Apr 23 2016 00:00:00 GMT+0100' 
print datetime.datetime.strptime(s, "%a %m %d %y %H:%M:%S GMT+0100") 

я получаю:

ValueError: time data 'Sat Apr 23 2016 00:00:00 GMT+0100' does not match format '%a %m %d %y %H:%M:%S GMT+0100'

Как разобрать такую ​​строку?

Примечание: Использование dateutil.parser.parse не получилось: он произвел некоторые странные datetime объект, который я мог не вычитают с другим DateTime, т.е. d1 - d2 не работал.

+0

Что значит, вы не могли бы вычесть объект datetime из другого? Каково было сообщение об ошибке? Я не могу придумать какой-либо режим отказа, который помешал бы вам вычесть два времени. – Paul

+0

Не рекомендую использовать синтаксический анализатор dateutil для известного формата, но FYI, я подозреваю, что проблема заключается в том, что анализатор дает вам объект с информацией о часовом поясе. Если вы хотите вычесть другое datetime, вы либо хотите, чтобы оба они были осведомлены о часовом поясе или оба были родными. Лучше всего просто конвертировать оба в UTC для абсолютных временных разниц. – Paul

ответ

2

Вместо этого: "%a %b %d %Y %H:%M:%S GMT+0100".

Я сделал два изменения:

  • Заменено %m (Месяц как нули десятичного числа) с %b (Месяцем, как сокращенное название локало)
  • Заменено %y (Год без веков как нулевого ДОПОЛНЯЮЩИЕ десятичное число) с %Y (год со столетиями как десятичное число)
Смежные вопросы