pytz:仅从GMT偏移量返回Olson时区名称

pytz:仅从GMT偏移量返回Olson时区名称,第1张

pytz:仅从GMT偏移量返回Olson时区名称

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(使用哪种版本取决于您的应用程序)是不够的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5618133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存