将给定时间从给定时区转换为UTC

2024-10-01 00:16:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个输入时间00:00和时区“亚洲/加尔各答”

我想将其转换为UTC时间,如“18.30”

我不想添加或减去偏移,因为它可能会影响日光节约

我所做的是

 local = pytz.timezone ("UTC")
 nativetime = datetime.strptime (setTime,frmt)
 local_dt = local.localize(nativetime, is_dst=None)
 utc_dt = local_dt.astimezone(pytz.utc)

但这不会改变任何事情,时间不会转换为UTC

请帮忙


Tags: datetimelocal时间dt节约utctimezonepytz
3条回答

既然您说您是Python新手,那么跳过pytz可能是件好事,因为它使用的是Python 3.9。您可以改为使用dateutil,在Python3.9中可以更容易地用zoneinfo替换它

from datetime import datetime, timezone
from dateutil.tz import gettz

# assuming you have something like
dt_naive = datetime.strptime('2020-08-05', '%Y-%m-%d')

# dt_naive has no time zone info, so set it:
dt_aware = dt_naive.replace(tzinfo=gettz('Asia/Kolkata'))

# now you can convert to another timezone using .astimezone:
dt_aware_utc = dt_aware.astimezone(timezone.utc)

# datetime.datetime(2020, 8, 4, 18, 30, tzinfo=datetime.timezone.utc)
# -> 5:30 hours behind, which matches dt_aware.utcoffset()

@thebjorn给了我答案

这就是我所做的

def utc_to_local(utc_dt,local_tz):
    local_dt = utc_dt.replace(tzinfo=pytz.utc).astimezone(local_tz)
    return local_tz.normalize(local_dt)


setTime='00:00:00'
setZone='Asia/Kolkata'

datePart = str(datetime.utcnow()).split(' ')[0]
dateTimeUtcStr = datePart+' '+str(setTime)
tz = pytz.timezone('Asia/Kolkata')
tz_utc = pytz.timezone('UTC')
dateTimeRef = datetime.strptime(dateTimeUtcStr, '%Y-%m-%d %H:%M:%S')

#local to utc
tzUtc = pytz.timezone('UTC')
local_dt = tz.localize(dateTimeRef, is_dst=None)
utc_dt = local_dt.astimezone(pytz.utc)
print(utc_dt)

#utc to local
altTime = utc_to_local(utc_dt,tz)

print(altTime)

类似这样,假设您在py3上:

>>> import datetime
>>> import pytz
>>> tz = pytz.timezone('Asia/Kolkata')
>>> dt = datetime.datetime(2020, 8, 4, 0, 0, tzinfo=tz)
>>> dt.astimezone(pytz.utc)
datetime.datetime(2020, 8, 3, 18, 7, tzinfo=<UTC>)
>>>

相关问题 更多 >