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

jk9hmnmh  于 2023-02-10  发布在  Go
关注(0)|答案(3)|浏览(160)

在我的Django项目中,我有一个表单***(forms.py)***,它实现了pytz来获取当前时区,如下所示:

tz = timezone.get_current_timezone()

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

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

它为字段提供了当前时区的默认值,在我的例子中,它恰好是Asia/Calcutta
现在,我想查找给定时区的UTC偏移值,在本例中,Asia/Calcutta为**+5:30**
我也尝试了tzinfo()方法,但是我找不到预期的结果。有人能指导我吗?

pzfprimi

pzfprimi1#

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

import pytz
import datetime

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

offset_seconds = tz.utcoffset(dt).total_seconds()

offset_hours = offset_seconds / 3600.0

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

h5qlskok2#

单个时区(如Asia/Calcutta)在不同日期可能具有不同的utc偏移量。在这种情况下,可以使用pytz_tzinfos枚举到目前为止已知的utc偏移量:

>>> offsets = {off for off, dst, abbr in pytz.timezone('Asia/Calcutta')._tzinfos}
>>> for utc_offset in offsets:
...     print(utc_offset)
... 
5:30:00
6:30:00
5:53:00

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

#!/usr/bin/env python
from datetime import datetime
import pytz # $ pip install pytz

utc_offset = datetime.now(pytz.timezone('Asia/Calcutta')).utcoffset()
print(utc_offset)
# -> 5:30:00
7fyelxc5

7fyelxc53#

如果您只需要标准化的小时偏移:

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

相关问题