Не удается подобрать маску для формата строки в дату с русской локалью
Есть строка вида 17 янв 2019 в 23:24:25. Необходимо перевести ее в формат даты, чтобы затем рассчитать разницу между двумя датами. Не удается перевести в дату. Пробовал так:
from datetime import datetime
def diff_days(x, y):
format = '%d %b %Y в %H:%M:%S'
d1 = datetime.strptime(x, format)
d2 = datetime.strptime(y, format)
return d2 - d1
Получаю ошибку
Exception has occurred: ValueError
time data '17 янв 2019 в 23:24:25' does not match format '%d %b %Y в %H:%M:%S'
Ссылка на datetime
Ответы (2 шт):
Автор решения: Эникейщик
→ Ссылка
Для "янв" должна быть русская локаль, а у вас скорее всего английская. Потому и не работает. Без костылей не решить.
Автор решения: Viewed
→ Ссылка
import locale
from datetime import datetime
def parse_day(x):
return datetime.strptime(x, '%d %b %Y в %H:%M:%S')
print(locale.getlocale()) # ('Russian_Russia', '1251')
#parse_day('17 янв 2019 в 23:24:25') # Ошибка
locale.setlocale(locale.LC_ALL, 'ru') # для Windows
# locale.setlocale(locale.LC_ALL, "ru_RU") # для MacOS
print(locale.getlocale()) # ('ru_RU', 'UTF-8')
parse_day('17 янв 2019 в 23:24:25') # Нет ошибки, корректно переводит в дату