Дата формата на основе локали в Python

Мне производили дату как

>>> import time
>>> print time.strftime("%d %B")
19 July

Есть ли способ отформатировать дату на основе локали, но все еще иметь контроль над тем, что показывают (в некоторых случаях, я не хочу год).

Например, на en_US машине, я хочу, чтобы это произвело:

July 19'th
1
задан Nicu Surdu 19 July 2010 в 11:59
поделиться

1 ответ

Методы strftime всегда используют текущую локаль. Например:

from datetime import date
d = date.today()
print d.format("%B %d")

выведет «19 июля» (не «th», извините ...), если ваш языковой стандарт en_US, но «juillet 19», если языковой стандарт использует французский.

Если вы хотите, чтобы порядок различных частей также зависел от локали или других более сложных вещей, я предлагаю вам взглянуть на библиотеку babel , которая использует данные из Common Locale. Data Repository и позволяет вам делать такие вещи, как:

from babel.dates import dateformat
format_date(d, format="long", locale="en_US")

, который выведет «19 июля 2010 г.», но «19 июля 2010 г.» для французского языка и т. Д. Обратите внимание, что вы должны явно запросить конкретный языковой стандарт (или, скорее, код языка) Увы, это не позволяет уйти от года. Однако, если вы углубитесь в babel, есть способы получить шаблоны для определенной локали ( babel.dates.get_date_format ("long", locale = "en_US"). Pattern даст вам "EEEE, MMMM d, yyyy, например, который вы можете использовать для аргумента format вместо long). Это по-прежнему оставляет вам задачу удалить «yyyy» из формата вместе с запятыми и т. Д., Которые могут стоять до или после. Кроме этого, боюсь, вам придется создавать свои собственные шаблоны для каждой локали.

2
ответ дан 2 September 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: