Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换字符串';格林尼治标准时间+;5:30';在python中不检查datetime.datetime.now()的情况下切换到时区(如Aisa/Kolkata)_Python_Datetime_Pytz - Fatal编程技术网

转换字符串';格林尼治标准时间+;5:30';在python中不检查datetime.datetime.now()的情况下切换到时区(如Aisa/Kolkata)

转换字符串';格林尼治标准时间+;5:30';在python中不检查datetime.datetime.now()的情况下切换到时区(如Aisa/Kolkata),python,datetime,pytz,Python,Datetime,Pytz,将字符串“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)

将字符串“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。时区和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
对象更好地集成。

代码有什么问题吗?它是否引发任何错误?相关: