更好的 Python 日期时间显示?

0 投票
1 回答
722 浏览
提问于 2025-04-16 11:26

我正在使用babel和pytz来获取时区。不过,对于美国的大部分地区,它们在下拉框中显示的内容并不太好:

"America/New_York" 显示为 "东部时间",而 "America/Nipigon" 也显示为 "东部时间"。

有没有什么办法可以把这些转换成包含城市信息的格式呢?其他时区看起来还不错,比如 "Asia/Jakarta" 转换成了 "印度尼西亚(雅加达)时间"。

1 个回答

2

在我这里,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)

输出结果

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

撰写回答