Лучшее отображение даты и времени на питоне? - PullRequest
0 голосов
/ 08 февраля 2011

Я использую babel и pytz для получения часовых поясов.Однако для большей части Америки в раскрывающемся списке отображается нечто не столь полезное:

«America / New_York» отображает «Eastern Time», «America / Nipigon» также отображает «Eastern Time».

Есть ли способ сделать это преобразование, чтобы добавить информацию о городе?другие часовые пояса кажутся нормальными, например, «Азия / Джакарта» преобразуется в «Время Индонезии (Джакарта)»

1 Ответ

2 голосов
/ 08 февраля 2011

У меня работает с Babel 0.9.5 и pytz 2010b.

py.tz

#!/usr/bin/env python

import pytz
import babel.dates

tz = pytz.timezone('America/New_York')
print babel.dates.get_timezone_location(tz)

вывод

$ python tz.py 
United States (New York) Time

Как у вас это работает?Какие версии?


Если вы застряли с имеющимися у вас версиями, то почему бы не использовать только записи Континент / Город?

Вот отправная точка для вас.Он определяет как континент, так и город, поэтому вы можете отформатировать его по своему усмотрению.

tzs.py

#!/usr/bin/env python

import pytz
import babel.dates
import re

country_timezones = {}
for (country, tzlist) in pytz.country_timezones.iteritems():
    country_name = pytz.country_names[country]
    cities = []
    for timezone in tzlist:
        # remove continent
        city = re.sub(r'^[^/]*/', r'', timezone)
        # Argentina has an extra "Argentina/" on my system (pytz 2010b)
        city = re.sub(country_name + '/', '', city)
        # Indiana and North Dakota have different rules by country
        # change Indiana/Location to Location, Indiana
        city = re.sub(r'^([^/]*)/(.*)', r'\2, \1', city)
        # change underscores to spaces
        city = re.sub(r'_', r' ', city)
        cities.append(city)  
    country_timezones[country_name] = cities

for country in sorted(country_timezones):
    print country
    for city in sorted(country_timezones[country]):
        print "\t%s" % (city)

output

Aaland Islands
        Mariehamn
Afghanistan
        Kabul
...
Indonesia
        Jakarta
        Jayapura
        Makassar
        Pontianak
...
United States
        Adak
        Anchorage
        Boise
        Center, North Dakota
        Chicago
        Denver
        Detroit
...