Как я могу получить человеко-читаемое имя часового пояса в Python?

В проекте Python, над которым я работаю, я хотел бы получить пользовательское имя часового пояса формы America / New_York , соответствующее локальному часовому поясу системы, для отображения пользователю. Каждый фрагмент кода, который я видел, который обращается к информации о часовом поясе, возвращает только числовое смещение (-0400) или буквенный код (EDT), а иногда и то и другое. Есть ли какая-нибудь библиотека Python, которая может получить доступ к этой информации, или если это не так, преобразовать смещенный / буквенный код в удобочитаемое имя?

Если для определенного часового пояса имеется более одного человека, которое можно прочитать, либо список возможных результатов, либо любой из них является прекрасным, и если нет человеческого удобочитаемого имени, соответствующего текущему часовому поясу, я возьму либо исключение, либо None или [] или что-то еще.

5 Solutions collect form web for “Как я могу получить человеко-читаемое имя часового пояса в Python?”

http://pytz.sourceforge.net/ может помочь. Если ничего другого, вы можете получить список всех часовых поясов, а затем перебрать их до тех пор, пока не найдете тот, который соответствует вашему смещению.

Следующее генерирует смещения временной шкалы по умолчанию (например, '-0400') и сокращения (например, «EDT») для общих географических названий часовых поясов (например, «Америка / Нью-Йорк»).

 import os import dateutil.tz as dtz import pytz import datetime as dt import collections result=collections.defaultdict(list) for name in pytz.common_timezones: timezone=dtz.gettz(name) now=dt.datetime.now(timezone) offset=now.strftime('%z') abbrev=now.strftime('%Z') result[offset].append(name) result[abbrev].append(name) print(result) 

Обратите внимание, что сокращения в часовом поясе могут иметь совершенно разные значения . Например, «EST» может выступать в Восточном летнем времени (UTC + 10) в Австралии или в Восточном стандартном времени (UTC-5) в Северной Америке.

Кроме того, смещения и аббревиатуры могут изменяться для регионов, которые используют стандартное время дневного света. Таким образом, сохранение статического dict не может обеспечить правильное имя часового пояса 365 дней в году.

Если вы хотите только буквально то, что вы просили, «имя часового пояса формы America / New_York, соответствующее системному локальному часовому поясу», и если вы только заботитесь о Linux (и тому подобное), то это должно выполнить эту задачу:

 import os import os.path import sys def main(argv): tzname = os.environ.get('TZ') if tzname: print tzname elif os.path.exists('/etc/timezone'): print file('/etc/timezone').read() else: sys.exit(1) if __name__ == '__main__': main(sys.argv) 

Конечно, было бы лучше иметь библиотеку, которая инкапсулирует это более чистым способом и, возможно, обрабатывает другие случаи, которые вы упоминаете в комментариях, например, уже имеющих объект tzinfo . Я думаю, вы можете сделать это с помощью pytz, упомянутого Amber, но для меня это не очевидно, как …

Я бы хотел получить «пользовательское» имя часового пояса формы America / New_York, соответствующее местному часовому поясу системы, для отображения пользователю.

Существует модуль tzlocal который возвращает объект pytz tzinfo, соответствующий локальному часовому поясу системы:

 #!/usr/bin/env python import tzlocal # $ pip install tzlocal print(tzlocal.get_localzone().zone) # display "human-readable" name (tzid) # -> Europe/Moscow 

Чтобы ответить на вопрос в заголовке (для людей из Google), вы можете использовать %Z%z для печати локальной информации о часовом поясе:

 #!/usr/bin/env python import time print(time.strftime('%Z%z')) # -> MSK+0300 

Он печатает текущую временную сокращенную аббревиатуру и смещение utc, соответствующее вашему местному часовому поясу.

Проверьте python-dateutil

 py> from dateutil.tz import * py> ny = gettz('America/New York') py> ny._filename '/usr/share/zoneinfo/America/New_York' py> ny._filename.split('/', 4)[-1] 'America/New_York' 
Interesting Posts

python для итерации файла csv для сопоставления поля и сохранения результата в другом файле данных

превращение списка в кортеж python

Проблема с относительным импортом в Python

Гауссовская подгонка для Python

Создайте собственную цветочную карту, используя матплотблиб и цветовую гамму сюжета

шаблоны проектирования python

Создание файла резервной копии + время добавления даты + перемещение файла, если файл существует. ПИТОН

Извлечение содержимого текстового содержимого таблицы с помощью xpath в строках для потребления?

scag crawl spider ajax pagination

Поиск режима списка

GeoDjango: Как я могу получить расстояние между двумя точками?

Как нормализовать массив NumPy в пределах определенного диапазона?

Код Python для отправки команды через командную строку

Python получает значения всего часа между двумя объектами datetime

где поставить freeze_support () в сценарии Python?

Python - лучший язык программирования в мире.