Формат даты на основе локали в python - PullRequest
1 голос
/ 19 июля 2010

У меня есть вывод даты типа

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

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

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

July 19'th

1 Ответ

2 голосов
/ 19 июля 2010

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

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

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

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

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 вместо " долго"). Это все еще оставляет вас с задачей удаления слова «гггг» из формата вместе с запятой и т. Д., Которые могут быть до или после. Кроме этого, боюсь, вам придется создавать свои собственные шаблоны для каждой локали.

...