python - 来自 UTC 偏移量的 Pytz 时区

标签 python datetime facebook-graph-api timezone pytz

我在 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/

相关文章:

python - 如何对 python 线程进行编程,以便用户可以使用 LINUX 中可用的监视工具来区分它们

python - 使用 matplotlib 散点图函数指向错误的 z 坐标

javascript - 如何在javascript中比较日期?

ios - 如何找出哪一张 Facebook 个人资料图片是主要的?

python - "Linking"或在 Python 中转发子记录器

python - swig,从列表到非标准 vector

python - 如何从Python数据框中的DateTimeIndex中删除微秒?

php - 获取上周一 - 周日的日期 : Is there a better way?

ios - 在 iOS 中获取 Facebook 好友列表

javascript - Facebook API : AppID|AppSecret token?