【问题标题】:exact utc time and localtime converted to utc time are different python确切的UTC时间和转换为UTC时间的本地时间是不同的python
【发布时间】:2021-07-18 01:54:58
【问题描述】:

我尝试打印确切的 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 将毫无意义,因为程序将在云中运行,因此它不知道它拥有的时区转换自

【问题讨论】:

  • utc_time = local_time.astimezone(pytz.utc) 给出了正确的值,所以我认为它与替换有关。
  • @henry-ecker 这不是我想要的,因为在我的目的中,我会给程序一些字符串,它会将其转换为 datetime 对象,然后将它们转换为 utc 时间
  • 如果您的服务器和客户端位于不同的时区,您将别无选择,只能将时区从客户端发送到服务器。

标签: python datetime utc


【解决方案1】:

我认为问题可能出在replace 函数参数tzinfo=tz 中。 tzinfo 期待 dateutil.tz.tz.tzfile 对象,而您传入​​的 tz 是来自 pytz 库的 pytz.tzfile.Asia/Colombo 对象。您可以通过使用str(tz) 函数将tz 转换为字符串类型而不是使用tzinfo=tz 来解决此问题,然后使用函数dateutil.tz.gettz 获取时区的dateutil.tz.tz.tzfile 对象(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)

【讨论】:

  • 对于 Python 3.9,您既不需要 pytz 也不需要 dateutil(第三方库) - 您在标准库中有 zoneinfo
猜你喜欢
  • 2018-07-27
  • 2013-08-19
  • 2014-07-18
  • 2021-02-04
  • 2010-09-15
  • 2016-07-29
  • 2011-05-01
  • 2019-04-30
相关资源
最近更新 更多