如何从时区获取UTC偏移值?

时间:2015-04-10 13:53:15

标签: django python-2.7

在我的Django项目中,我有一个 (forms.py) 表单,它实现pytz以获取当前时区:

tz = timezone.get_current_timezone()

我已将此值传递给表单字段作为初始值,如下所示:

timezone = forms.CharField(label='Time Zone', initial=tznow)

为该字段提供当前时区的默认值,在我的情况下,它恰好是 Asia / Calcutta

现在我想查找给定时区的UTC偏移值,在这种情况下,亚洲/加尔各答 +5:30

我也试过了tzinfo()方法,但我找不到预期的结果。有人可以指导我完成这个吗?

3 个答案:

答案 0 :(得分:3)

UTC偏移量由tzinfo的任何实现(如pytz)的utcoffset方法以timedelta给出。例如:

import pytz
import datetime

tz = pytz.timezone('Asia/Calcutta')
dt = datetime.datetime.utcnow()

offset_seconds = tz.utcoffset(dt).seconds

offset_hours = offset_seconds / 3600.0

print "{:+d}:{:02d}".format(int(offset_hours), int((offset_hours % 1) * 60))
# +5:30

答案 1 :(得分:3)

单个时区(例如null)在不同日期可能会有不同的utc偏移量。在这种情况下,您可以使用Asia/Calcutta的{​​{1}}枚举目前已知的utc偏移量:

pytz

获取给定时区的当前utc偏移量:

_tzinfos

答案 2 :(得分:0)

如果您只想要归一化的小时偏移量:

def curr_calcutta_offset():
    tz_calcutta = pytz.timezone('Asia/Calcutta')
    offset = tz_calcutta.utcoffset(datetime.utcnow())
    offset_seconds = (offset.days * 86400) + offset.seconds
    offset_hours = offset_seconds / 3600

    return offset_hours

curr_calcutta_offset()
# 5.5