tôi đã sử dụng pytz
để tạo ra một bản đồ TZINFOS
:
from datetime import datetime as dt
import pytz
from dateutil.tz import gettz
from pytz import utc
from dateutil import parser
def gen_tzinfos():
for zone in pytz.common_timezones:
try:
tzdate = pytz.timezone(zone).localize(dt.utcnow(), is_dst=None)
except pytz.NonExistentTimeError:
pass
else:
tzinfo = gettz(zone)
if tzinfo:
yield tzdate.tzname(), tzinfo
TZINFOS
Cách sử dụng
>>> TZINFOS = dict(gen_tzinfos())
>>> TZINFOS
{'+02': tzfile('/usr/share/zoneinfo/Antarctica/Troll'),
'+03': tzfile('/usr/share/zoneinfo/Europe/Volgograd'),
'+04': tzfile('Europe/Ulyanovsk'),
'+05': tzfile('/usr/share/zoneinfo/Indian/Kerguelen'),
...
'WGST': tzfile('/usr/share/zoneinfo/America/Godthab'),
'WIB': tzfile('/usr/share/zoneinfo/Asia/Pontianak'),
'WIT': tzfile('/usr/share/zoneinfo/Asia/Jayapura'),
'WITA': tzfile('/usr/share/zoneinfo/Asia/Makassar'),
'WSDT': tzfile('/usr/share/zoneinfo/Pacific/Apia'),
'XJT': tzfile('/usr/share/zoneinfo/Asia/Urumqi')}
parser
Cách sử dụng
>>> date_str = 'Sat, 11/01/09 8:00PM EST'
>>> tzdate = parser.parse(date_str, tzinfos=TZINFOS)
>>> tzdate.astimezone(utc)
datetime.datetime(2009, 11, 2, 1, 0, tzinfo=<UTC>)
Việc quy đổi tính theo giờ UTC là cần thiết ed vì có nhiều múi giờ có sẵn cho mỗi từ viết tắt. Kể từ TZINFOS
là một dict
, nó chỉ có múi giờ cuối cùng cho mỗi từ viết tắt. Và bạn có thể không nhận được cái mà bạn mong đợi trước khi chuyển đổi.
>>> tzdate
datetime.datetime(2009, 11, 1, 20, 0, tzinfo=tzfile('/usr/share/zoneinfo/America/Port-au-Prince'))
Sẽ dễ dàng hơn nếu chúng tôi giới hạn thời gian ở múi giờ ở Hoa Kỳ? Có một bộ chữ viết tắt "chuẩn" trong sự kiện đó không? –
Đừng quên rằng "múi giờ ở Hoa Kỳ" bao gồm AKST, AKDT, HAST và HADT. Nếu bạn chỉ có nghĩa là 48 tiểu bang lục địa, thì bạn chỉ có 8 múi giờ 3 ký tự để xử lý (4 múi giờ, thời gian tiết kiệm tiêu chuẩn và ánh sáng ban ngày). – PaulMcG
Rõ ràng để đo lường tốt, một số nơi sử dụng HST và HDT tương đương với HAST và HADT = \ –