UTC本身的偏移量可能是不明确的(它可能对应于在某个时间段内可能具有不同规则的多个时区):
输出量#!/usr/bin/env pythonfrom datetime import datetime, timedeltaimport pytz # $ pip install pytzinput_utc_offset = timedelta(hours=-4)timezone_ids = set()now = datetime.now(pytz.utc) #XXX: use date that corresponds to input_utc_offset instead!for tz in map(pytz.timezone, pytz.all_timezones_set): dt = now.astimezone(tz) tzinfos = getattr(tz, '_tzinfos',[(dt.tzname(), dt.dst(), dt.utcoffset())]) if any(utc_offset == input_utc_offset for utc_offset, _, _ in tzinfos): # match timezones that have/had/will have the same utc offset timezone_ids.add(tz.zone)print(timezone_ids)
{'America/Anguilla', 'America/Antigua', 'America/Argentina/Buenos_Aires', ..., 'Cuba', 'EST5EDT', 'Jamaica', 'US/East-Indiana', 'US/Eastern', 'US/Michigan'}
您甚至不能使用限制列表,
pytz.country_timezones['us']因为它会排除您的示例之一:
'America/Puerto_Rico'。
如果您知道坐标(纬度,经度);您可以从shape文件中获取时区ID
:您可以使用本地数据库或网络服务:
输出量#!/usr/bin/env pythonfrom geopy import geoprers # pip install "geopy[timezone]"g = geoprers.GoogleV3()for coords in [(18.4372, -67.159), (41.9782, -71.7679), (61.1895, -149.874)]: print(g.timezone(coords).zone)
America/Puerto_RicoAmerica/New_YorkAmerica/Anchorage
注意:某些当地时间可能是模棱两可的,例如,在DST转换结束时时间回落。在这种情况下,您可以传递
is_dst=None给
.localize()方法来引发异常。
tz数据库的不同版本在某些日期的某些时区可能具有不同的utc偏移,即,仅存储UTC时间和时区ID(使用哪种版本取决于您的应用程序)是不够的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)