Конвертировать CST в UTC - PullRequest
0 голосов
/ 13 ноября 2018

Как я могу преобразовать CST в UTC по этому коду?

str(datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S")) + "Z" 

Это предопределено, и мой пользовательский интерфейс находится в CST, а API хочет быть в UTC.Итак, как я могу конвертировать CST в UTC, используя тот же код?

1 Ответ

0 голосов
/ 13 ноября 2018

Один комментарий: если вы на самом деле используете datetime.datetime.utcnow(), вам не нужно делать никаких преобразований. Это время UTC, хотя технически это наивное время даты, потому что к нему не прикреплен атрибут .tzinfo. (И вам также не нужно звонить str.)


В противном случае, предполагая, что ваше время ввода фактически локально (не использует .utcnow()), вы можете использовать time.timezone, чтобы получить timedelta. Вот пример из моей системы, который является EST:

>>> import datetime
>>> import time

>>> localtime = datetime.datetime.now()
>>> localtime
datetime.datetime(2018, 11, 13, 13, 22, 54, 109529)
>>> datetime.datetime.utcnow()
datetime.datetime(2018, 11, 13, 18, 23, 3, 373213)

>>> convrt = localtime + datetime.timedelta(
...     seconds=time.timezone)
>>> 
>>> convrt
datetime.datetime(2018, 11, 13, 18, 22, 54, 109529)
>>> convrt.replace(tzinfo=datetime.timezone.utc).isoformat()
'2018-11-13T18:22:54.109529+00:00'

Обратите внимание, что .isoformat() использует числовое смещение. Чтобы получить имя, используйте %Z:

>>> convrt.replace(tzinfo=datetime.timezone.utc).strftime("%Y-%m-%dT%H:%M:%S%Z")
'2018-11-13T18:22:54UTC'

time.timezone - это смещение местного (не летнего) часового пояса в секундах к западу от UTC. Также есть time.altzone, который смещен из местного часового пояса DST (секунды на запад).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...