Обратите внимание, что я не изучил все доступные библиотеки и просто хочу предоставить отправную точку для решения других проблем.
Я буду использовать следующую локализованную строку во всех примерах:
dt_str = "Thu 3 Apr 2014 13:19:52" # en_US
1.Методы datetime.datetime
Это самый простой подход, но он становится громоздким, если вы используете локали, отличные от локали по умолчанию.
Информацию о синтаксисе можно найти здесь .
import datetime
dt = datetime.datetime.strptime(dt_str,
"%a %d %b %Y %H:%M:%S")
# datetime.datetime(2014, 4, 3, 13, 19, 52)
s = dt.strftime("%a %-d %b %Y %H:%M:%S")
# 'Thu 3 Apr 2014 13:19:52'
Если вы хотите проанализировать или отформатировать другие локали, вы должны изменить глобальную локаль, что может привести к нежелательным побочным эффектам.(Я не рекомендую такой подход.)
import datetime
import locale
locale.setlocale(locale.LC_TIME, "de_DE.UTF-8")
dt = datetime.datetime.strptime("Do 3 Apr 2014 13:19:52",
"%a %d %b %Y %H:%M:%S")
# datetime.datetime(2014, 4, 3, 13, 19, 52)
s = dt.strftime("%a %-d %b %Y %H:%M:%S")
# 'Do 3 Apr 2014 13:19:52'
2.Библиотека python 'arrow'
arrow позволяет передавать локаль (в противном случае она использует "en_US").
import arrow # installed via pip
import datetime
### localized string -> datetime
a_dt = arrow.get(dt_str,
"ddd D MMM YYYY H:mm:ss",
locale="en_US") # "en_US" is also the default, so this is just for clarification
dt = a_dt.datetime
# datetime.datetime(2014, 4, 3, 13, 19, 52, tzinfo=tzutc())
### datetime -> localized string
a_s = arrow.get(datetime.datetime(2014, 5, 17, 14, 0, 0))
s = a_s.format("ddd D MMM YYYY H:mm:ss",
locale="en_US") # "en_US" is also the default, so this is just for clarification
# 'Sat 17 May 2014 14:00:00'
Это особенно полезно, если требуетсялокаль отличается от локали по умолчанию.
3.Библиотека Python 'babel' (в основном для форматирования)
Сила babel - это форматирование (К сожалению, не может разобрать любойpattern . Надежным представляется только формат "короткий" .)
import babel.dates # 'babel' installed via pip
import datetime
dt = datetime.datetime(2014, 4, 3, 13, 19, 52)
# parsing is the problem with babel, therefore I created the datetime object directly.
s = babel.dates.format_datetime(dt,
"EEE d MMM yyyy H:mm:ss",
locale="en_US")
# 'Thu 3 Apr 2014 13:19:52'
4.Библиотека python 'dateparser' (только синтаксический анализ)
dateparser очень мощная.Он способен искать даты в более длинных текстах и поддерживает негригорианские системы календарей, просто чтобы назвать несколько функций.
import dateparser # installed via pip
dt = dateparser.parse(dt_str,
date_formats=["%a %d %b %Y %H:%M:%S"],
languages=["en"])
# datetime.datetime(2014, 4, 3, 13, 19, 52)
5.И последнее, но не менее важное:
Следующие заслуживающие внимания библиотеки Python имеют отличные функции, но, к сожалению, я не смог использовать их для этой конкретной проблемы (или не знал, как их правильно использовать).