Использование python datetime.datetime.strptime в окнах с часовым поясом BST - PullRequest
2 голосов
/ 24 августа 2011

Мне нужно проанализировать много разных дат в разных форматах. У меня возникли проблемы со следующим, и я подумал, может ли кто-нибудь объяснить, почему;

В системе linux работает:

from datetime import datetime
datetime.strptime('Tue 23 Aug 2011 09:00:07 PM BST','%a %d %b %Y %H:%M:%S %p %Z')

Но под окнами он поднимается

ValueError: данные времени не соответствуют формату

Однако, если я пытаюсь использовать GMT, а не BST на Windows, он работает нормально;

from datetime import datetime
datetime.strptime('Tue 23 Aug 2011 09:00:07 PM GMT','%a %d %b %Y %H:%M:%S %p %Z')

Есть ли причина, по которой python не понимает часовой пояс BST под Windows, но он прекрасно работает под Linux?

спасибо,

Мт.

1 Ответ

1 голос
/ 24 августа 2011

По моему мнению, парсинг трехбуквенного кода часового пояса, как это, не является хорошей практикой (если, конечно, у вас нет выбора).Например, «EST» обычно используется в США для UTC-4/5, а также широко используется в Австралии.Поэтому любая поддержка "EST" должна зависеть от локали.Меня не удивит, если «BST» будет так же неоднозначно.

Я настоятельно рекомендую использовать модуль pytz, в котором британское гражданское время получает строковый идентификатор Europe/London, а UTC -называется Etc/UTC.API pytz даст согласованные результаты независимо от языкового стандарта пользователя или системы, в которой запущено приложение.

Если вы работаете с пользовательским интерфейсом, который должен быть привязан к региональному языку, или анализируете входные данные с форматами, которые нельзя изменить, затем рассмотрите возможность использования словаря сокращений для pytz объектов часового пояса.Например: {'BST': 'Europe/London'}.Тогда ваше приложение может работать с датами и временем UTC равномерно, что значительно уменьшит вероятность ошибок.

...