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

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

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

12
задан David Z 15 August 2010 в 20:47
поделиться

3 ответа

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

9
ответ дан 2 December 2019 в 04:52
поделиться

Ниже создается 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 дней в году.

10
ответ дан 2 December 2019 в 04:52
поделиться

Проверить 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'
1
ответ дан 2 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: