我在 Python 中使用 Facebook 的图形 API。对于任何 user_id
,它以表示与 UTC 的偏移量的 float 形式给出用户的时区。
示例:对于印度的某人,它给出 5.5
我如何将其转换为有效的时区
,例如Asia/Kolkata
?
我研究过 pytz
但没有找到任何合适的方法。
最佳答案
您可以通过查看所有条目找到与 Olson 数据库中最后一个条目的给定偏移量(忽略 DST)匹配的所有时区。
代码:
import datetime as dt
import pytz
def possible_timezones(tz_offset, common_only=True):
# pick one of the timezone collections
timezones = pytz.common_timezones if common_only else pytz.all_timezones
# convert the float hours offset to a timedelta
offset_days, offset_seconds = 0, int(tz_offset * 3600)
if offset_seconds < 0:
offset_days = -1
offset_seconds += 24 * 3600
desired_delta = dt.timedelta(offset_days, offset_seconds)
# Loop through the timezones and find any with matching offsets
null_delta = dt.timedelta(0, 0)
results = []
for tz_name in timezones:
tz = pytz.timezone(tz_name)
non_dst_offset = getattr(tz, '_transition_info', [[null_delta]])[-1]
if desired_delta == non_dst_offset[0]:
results.append(tz_name)
return results
测试代码:
print(possible_timezones(5.5, common_only=False))
结果:
['Asia/Calcutta', 'Asia/Colombo', 'Asia/Kolkata']
关于python - 来自 UTC 偏移量的 Pytz 时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036998/