Python strptime ValueError: данные времени не соответствуют формату - PullRequest
0 голосов
/ 02 мая 2018

Я добавил часовые пояса в свой столбец datetime в моей базе данных postgreSQL.

Теперь у меня появляется ошибка выше каждый раз, когда я хочу сравнить даты. В некоторых моментах у меня есть JSON-запросы, объекты datetime передаются в виде строк, поэтому мне нужно проанализировать их с дополнительной информацией о часовом поясе, которую я получаю:

ValueError: time data '2018-05-02 11:52:26.108540+02:00' 
does not match format '%Y-%m-%d %H:%M:%S.%f+%Z' 

Раньше у меня было:

2018-05-02 11:52:26.108540

, который отлично работал с:

%Y-%m-%d %H:%M:%S.%f

Добавлена ​​новая информация: +02:00

В документе strptime говорится, что я должен использовать %z или %Z, но это не работает.

EDIT:

Я использую Python 3

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Вам нужно удалить двоеточие и использовать маленький %z, чтобы это сработало.

>>> s = '2018-05-02 11:52:26.108540+02:00'
>>> fmt = %Y-%m-%d %H:%M:%S.%f%z'
>>> time.strptime(s, fmt)
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=2, tm_hour=11, tm_min=52, tm_sec=26, tm_wday=2, tm_yday=122, tm_isdst=-1)
0 голосов
/ 02 мая 2018

Проблема в смещении +02:00, вам нужно удалить двоеточие ':', тогда оно будет работать:

In[48]:
dt.datetime.strptime('2018-05-02 11:52:26.108540+0200', '%Y-%m-%d %H:%M:%S.%f%z')

Out[48]: datetime.datetime(2018, 5, 2, 11, 52, 26, 108540, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))

Таким образом, вам нужно будет просмотреть все строки даты и времени и удалить их, чтобы strptime правильно их проанализировал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...