准确的 utc 时间和转换为 utc 时间的本地时间不同 python

exact utc time and localtime converted to utc time are different python

我尝试打印准确的 UTC 时间,然后尝试打印 UTC 时间,方法是首先获取本地时间,然后将其转换为 UTC 时间,但它们有 11 分钟的差异

为什么会发生这种情况,我该如何解决这个问题,以便在我直接获取 UTC 时间时获得打印的正确 UTC 时间

from datetime import datetime, tzinfo
import tzlocal
import pytz

local_time =datetime.now()
tz = tzlocal.get_localzone()
print(tz)

utc_time = local_time.replace(tzinfo=tz).astimezone(pytz.utc)
print(utc_time)
correct_utc =datetime.utcnow()
print(correct_utc)

输出

Asia/Colombo
2021-07-18 01:54:31.442555+00:00
2021-07-18 01:43:31.619536

我必须制作一个程序,该程序接受日期时间字符串,然后将它们转换为日期时间对象,然后将它们转换为 utc,因此使用 astimezone 将毫无意义,因为该程序将 运行 在云中,因此它不知道它必须转换的时区

我认为问题可能出在 replace 函数参数 tzinfo=tz 中。 tzinfo 需要一个 dateutil.tz.tz.tzfile 对象,而您传入​​的 tzpytz 库中的一个 pytz.tzfile.Asia/Colombo 对象。您可以解决此问题,而不是使用 tzinfo=tz,您可以使用 str(tz) 函数将 tz 转换为字符串类型,然后使用函数 dateutil.tz.gettz 获取时区的 [=14] =] 对象 (tzinfo=dateutil.tz.gettz(str(tz)))

from datetime import datetime, tzinfo
import tzlocal
import pytz
import dateutil.tz

local_time =datetime.now()
tz = tzlocal.get_localzone()
print(tz)

utc_time = local_time.replace(tzinfo=dateutil.tz.gettz(str(tz))).astimezone(pytz.utc)
print(utc_time)
correct_utc =datetime.utcnow()
print(correct_utc)