将字符串'GMT+5:30'转换为时区(如 Aisa/Kolkata),而无需在 python 中检查 datetime.datetime.now()



将字符串'GMT+5:30'转换为时区(如Aisa/Kolkata(,而不在python中检查datetime.datetime.now((

now = datetime.datetime.astimezone(Time_Zone).tzname()  # current time
print(now)
print(type(now))
utc_offset = datetime.timedelta(hours=5, minutes=30)  # +5:30
print(utc_offset)
for tz in map(pytz.timezone, pytz.all_timezones_set):
if (now.astimezone(tz).utcoffset() == utc_offset):
print(tz.zone)

要查找给定 UTC 偏移量的匹配时区,您必须指定一个日期,因为时区的 UTC 偏移量会随时间而变化,并且它们在某些时间段内可能具有 DST。时区和夏令时起源于政治决策,因此它并不像将 Python 脚本拼凑在一起那么容易。

下面是使用dateutil查找具有 UTC+5:30 的时区的示例:

import datetime
from dateutil.tz import gettz
from dateutil.zoneinfo import get_zonefile_instance
offset, match_offset = int(60*60*5.5), []
for z in get_zonefile_instance().zones:
off = datetime.datetime.now(tz=gettz(z)).utcoffset()
if int(off.total_seconds()) == offset:
match_offset.append(z)
print(match_offset)
# ['Asia/Calcutta', 'Asia/Colombo', 'Asia/Kolkata']

您可以将datetime.datetime.now替换为您选择的任何日期。

使用pytz得到相同的结果:

import pytz
offset, match_offset = int(60*60*5.5), []
for z in pytz.all_timezones:
off = datetime.datetime.now(tz=pytz.timezone(z)).utcoffset()
if int(off.total_seconds()) == offset:
match_offset.append(z)
print(match_offset)
# ['Asia/Calcutta', 'Asia/Colombo', 'Asia/Kolkata']

请注意,pytz在获取 UTC 偏移量方面更有效,但是我更喜欢dateutil,因为它与 Python 标准 lib/datetime对象更好地集成。

最新更新