如何将 GMT 时间转换为本地时间

How to Convert GMT time to Local time

我是 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)

您要查找的命令是datetime.utcnow()。 如果您使用此时间而不是 datetime.now(),脚本将使用当前 GMT 时间而不是您当前时间 zone/machine 时间。

请注意:正如您在 中看到的,您需要谨慎对待。 time-zone 意识。但是,如果您将所有时间对象都保持在 UTC 中,使用 datetime.utcnow() 的简单方法应该没问题。

这里有一种方法,您可以在评论中进行一些解释:

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 对象属于本地时间(OS 时区设置),如果它是天真的(没有时区信息)。
  • 其次,您不能将 naive 日期时间对象(未定义时区/UTC 偏移量)与 aware 日期时间对象(时区信息给定)。

[datetime module docs]