В проекте Python я продолжаю работать, я хотел бы смочь получить "человекочитаемое" название часового пояса формы America/New_York, соответствуя системе локальный часовой пояс, отобразиться пользователю. Каждая часть кода, я видел, что информация о часовом поясе доступов только возвращает или числовое смещение (-0400) или алфавитный код (EDT) или иногда оба. Есть ли некоторая библиотека Python, которая может получить доступ к этой информации, или если не, что, преобразуйте смещение/алфавитный код на человекочитаемое имя?
Если будет больше чем одно человекочитаемое имя, соответствующее конкретному часовому поясу, или список возможных результатов или любой из них в порядке, и если не будет никакого человекочитаемого имени, соответствующего зоне текущего времени, то я возьму или исключение или None
или []
или что бы то ни было.
http://pytz.sourceforge.net/ может помочь. По крайней мере, вы можете получить список всех часовых поясов, а затем перебирать его, пока не найдете тот, который соответствует вашему смещению.
Ниже создается defaultdict, отображающий смещения временных зон (например, '-0400') и аббревиатуры (например, 'EDT') на распространенные географические названия временных зон (например, 'America/New_York').
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) в Северной Америке.
Кроме того, смещения и сокращения могут меняться для регионов, использующих летнее стандартное время. Поэтому сохранение статической диктовки может не обеспечивать правильное название часового пояса 365 дней в году.
Проверить 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'