Принудительно указывать локализацию для одной функции как UK / English только в одной функции, чтобы datetime.strftime всегда возвращало английский формат - PullRequest
2 голосов
/ 15 ноября 2010

Мне нужно написать очень простую функцию Python, которая принимает дату в формате Excel (целое число дней, прошедших с 1 января 1900 года). Я преобразую это в объект datetime.date в python, и, наконец, я хотел бы отформатировать его как сокращенную строковую дату (например, «Jan10» или «Mar11») - в основном это дата в формате MmmYY.

dt.strftime( fmt )

Эта функция прекрасно работает на рабочих станциях в Великобритании и США, однако я заметил, что на некоторых компьютерах коллег, работающих на французском языке, мы получаем неправильный ансер:

>>> locale.getdefaultlocale()
('fr_FR', 'cp1252')

На этих машинах вышеприведенная функция возвращает форматированную строку даты на французском языке, что не является желаемым выводом.

Я понимаю, что мог бы использовать функцию locale.setlocale для глобального переопределения локали, однако это не то, что желательно. В других местах системы могут быть сценарии, для которых требуется языковой стандарт на родном языке. Я не хочу нарушать чей-то компонент путем переопределения глобальной локали.

Так что я могу сделать? Если не считать переписывания функции форматирования строки, есть ли способ заставить функцию strftime выводить ее в локали Великобритании / США, не затрагивая ничего другого?

Платформа = Python2.4.4 в Windows 32bit

К вашему сведению, это решение не применимо - оно глобально меняет локаль, чего я и не хочу делать: Форматирование даты в Python

Ответы [ 2 ]

0 голосов
/ 15 ноября 2010

Да, это возможно сделать. У меня была такая же проблема при реализации веб-сервера. Я хотел, чтобы дата / время отображались в локали веб-браузера клиента, а не в локальном сервере.

В стандартной библиотеке есть модуль локали. Проверьте setlocale () и getlocale () методы, особенно с категорией LC_TIME. Вы, вероятно, захотите использовать getlocale (), чтобы получить существующую локаль, затем setlocale, чтобы установить для нее что-то вроде 'EN_US' или 'C', затем вызвать метод strftime и, наконец, восстановить предыдущую локальную версию с помощью другого вызова setlocale () .

0 голосов
/ 15 ноября 2010

Если вам нужны фиксированные строки, то, вероятно, лучше создать сопоставление номера месяца и имени месяца и просто использовать его.

months = {1: 'Jan', 2: 'Feb', ...}

printf '%s%02d' % (months[somedt.month], somedt.year % 100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...