преобразовать заданное время из заданного часового пояса в UTC - PullRequest
0 голосов
/ 04 августа 2020

У меня есть два входа: время 00:00 и часовой пояс «Азия / Калькутта»

Я хочу преобразовать это в UT C время, например '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)

, но это ничего не меняет, время не конвертируется в UT C

Пожалуйста, помогите

Ответы [ 3 ]

1 голос
/ 05 августа 2020

Поскольку вы говорите, что вы новичок в Python, было бы неплохо пропустить pytz, так как будет устаревшим с Python 3.9. Вместо этого вы можете использовать dateutil , которое проще заменить на zoneinfo в Python 3.9.

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()
1 голос
/ 04 августа 2020

Что-то вроде этого, если вы используете 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>)
>>>
0 голосов
/ 05 августа 2020

@ 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)
...