Как преобразовать время GMT в местное время - PullRequest
0 голосов
/ 05 августа 2020

Я новичок в python, и мне нужно преобразовать переменную air_time в локальное машинное время или переменную current_time в GMT, а затем вычесть одно из других в этом скрипте, но не знаю, как это сделать это.

from datetime import datetime

air_time_GMT = '2020-08-05 13:30:00'
air_time = datetime.strptime(air_time_GMT, '%Y-%m-%d %H:%M:%S')
current_time = datetime.now()

time_remaining = air_time - current_time

print(time_remaining)

Ответы [ 2 ]

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

вот способ, как вы могли бы это сделать с некоторыми пояснениями в комментариях:

from datetime import datetime, timezone

air_time_GMT = '2020-08-05 13:30:00'

# Python will assume your input is local time if you don't specify a time zone:
air_time = datetime.strptime(air_time_GMT, '%Y-%m-%d %H:%M:%S')
# ...so let's do this:
air_time = air_time.replace(tzinfo=timezone.utc) # using UTC since it's GMT
       
# again, if you don't supply a time zone, you will get a datetime object that
# refers to local time but has no time zone information:
current_time = datetime.now()

# if you want to compare this to a datetime object that HAS time zone information,
# you need to set it here as well. You can set local time zone via
current_time = current_time.astimezone()

print(current_time)
print(air_time-current_time)
>>> 2020-08-05 14:11:45.209587+02:00 # note that my machine is on UTC+2 / CEST
>>> 1:18:14.790413

Я думаю, вы должны заметить здесь две вещи.

  • Во-первых, Python по умолчанию предполагает, что объект datetime принадлежит местному времени (настройка часового пояса ОС), если он наивен (нет информации о часовом поясе).
  • Во-вторых, вы не можете сравнивать наивные объекты datetime (нет часовой пояс / UT C смещение определено) до с учетом объектов datetime (указана информация о часовом поясе).

[datetime module docs]

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

Ищете команду datetime.utcnow(). Если вы используете это вместо datetime.now(), сценарий будет использовать текущее время GMT вместо вашего текущего часового пояса / машинного времени.

Обратите внимание: как вы можете видеть в ответ MrFuppes, вам нужно быть осторожным в отношении. осведомленность о часовом поясе. Однако, если вы сохраняете все временные объекты наивными и в UT C, простой подход с datetime.utcnow () должен подойти.

...