Формат strptime не совпадает, хотя выглядит правильно? - PullRequest
0 голосов
/ 05 июля 2019

Я получаю сообщение об ошибке при попытке анализа даты и времени:

ValueError: ("time data '2019-07-05T10:19:42+00:00' does not match format '%Y-%m-%dT%H:%M:%S%z'", 'occurred at index 0')

строка, которая генерирует эту ошибку:

df['yearmonth'] = df.apply(lambda row: datetime.strptime(row['createdAt'], '%Y-%m-%dT%H:%M:%S%z').strftime("%Y%m"), axis=1)

Насколько я вижу форматправильно, и код отлично работает на других машинах.

Он работает, когда я удаляю% z из формата и просто беру часть данных для форматирования, например, как показано ниже:

df['yearmonth'] = df.apply(lambda row: datetime.strptime(row['createdAt'][:19], '%Y-%m-%dT%H:%M:%S').strftime("%Y%m"), axis=1)

Итак, я предполагаю, что% z вызывает проблемы.Я полагаю, что проблема связана с локалями, но я попытался установить локаль разными способами, но безуспешно.

Буду очень признателен за понимание того, как это исправить без использования среза!

Ответы [ 3 ]

2 голосов
/ 05 июля 2019

Если можете, рассмотрите возможность использования dateutil:

import datetime
import dateutil.parser

my_date_str = '2019-07-05T10:19:42+00:00'
my_date = dateutil.parser.parse(my_date_str)
print(type(my_date)) # <class 'datetime.datetime'>  
print(my_date.strftime('%Y%m')) # 201907
2 голосов
/ 05 июля 2019

Функция Python 2 strptime() действительно не поддерживает формат% z для часовых поясов (поскольку базовая функция time.strptime () не поддерживает ее).У вас есть два варианта:

Игнорировать часовой пояс при разборе с strptime:

time_obj = datetime.datetime.strptime(time_str[:19], '%Y-%m-%dT%H:%M:%S')

использовать модуль dateutil, его функция разбора работает с часовыми поясами:

from dateutil.parser import parse
time_obj = parse(time_str)

Вы также можете перейти на Python 3.2 или новее, где поддержка часового пояса была улучшена до такой степени, что %z сработает, при условии, что вы удалили последнее: из входных данных и - - перед% z

0 голосов
/ 08 июля 2019

Хотя синтаксический анализ '% z' поддерживается Python 3.6, в этом формате:

+HHMM or -HHMM

он не поддерживает синтаксический анализ "% z", если этот раздел даты содержит двоеточие:

+HH:MM or -HH:MM

Однако Python 3.7 поддерживает синтаксический анализ раздела '% z', если в этом разделе есть двоеточие.

Следовательно, использование Python 3.7 вместо Python 3.6 решит эту проблему.

...