繁体   English   中英

来自UTC偏移的Pytz时区

[英]Pytz Timezone from UTC offset

我正在使用Facebook的图形API与Python。 对于任何user_id ,它将用户的时区指定为浮点数,表示与UTC的偏移量。

示例:对于印度的某个人,它给出5.5

我如何将其转换为像Asia/Kolkata这样的有效timezone

我看过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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM