为什么时区不知道日期时间对象会以本地时区打印出来?

Why does timezone unaware datetime object print out in local timezone?

提问人:AlanSTACK 提问时间:9/17/2023 最后编辑:FObersteinerAlanSTACK 更新时间:9/17/2023 访问量:56

问:

当我像这样实例化一个日期时间对象时:

>>> print(datetime.datetime.now())
2023-09-16 10:30:15.50

我得到了正确的当地时间,目前大约是.10:30 AM

为什么会这样?它不应该默认为UTC时间吗?

Python 日期时 UTC

评论

1赞 jonrsharpe 9/17/2023
“不应该默认为UTC时间吗?”- “返回当前本地日期和时间”,所以...不?
1赞 Klaus D. 9/17/2023
为了获得预期的结果,实际上需要了解时区。但它实际上是如此的无知,简单地说,它甚至不知道它是不完整的。datetime
0赞 AlanSTACK 9/17/2023
@KlausD。啊,我想这种混淆源于将“有意识与无意识”与“本地和UTC”混为一谈。忘记了可能具有“本地未知”的日期时间对象。
1赞 FObersteiner 9/17/2023
您可能正在寻找的是有意识的与幼稚的。不过要小心,尽管声称不知道时区的结果,但它的行为就像存在时区一样。尝试使用其方法转换为 Unix 时间,看看会发生什么......dateitme.nowtimestamp

答:

2赞 Sauron 9/17/2023 #1
  • datetime.datetime.now()默认情况下,函数返回当前本地日期和时间。本地时间由系统的时区设置决定。
  • 如果要以 UTC 格式获取当前时间,可以使用:
import datetime
print(datetime.datetime.now(datetime.timezone.utc))

评论

1赞 AlanSTACK 9/17/2023
对不起,我对文档“如果可选参数 tz 是 None 或未指定,这就像 today()”感到困惑。谢谢!
1赞 FObersteiner 9/17/2023
"如果你想以UTC格式获取当前时间“ - 你应该使用的是。 是一种容易出错的方法(恕我直言,应该弃用),顾名思义,这是一个可感知的结果,而实际上并非如此。另请参阅停止使用 utcnow 和 utcfromtimestampdatetime.datetime.now(datetime.timezone.utc)utcnow
0赞 Sauron 9/17/2023
好的,很好不知道,谢谢你的分享,会编辑这个。
1赞 FObersteiner 9/17/2023
我不确定实际上是什么时候引入的,但我的猜测是,它来自时区处理在 Python 中还不是真正东西的时代,作为一种解决方法。那肯定是在我开始学习 Python 3.6 版本之前。但是我已经看到它在行动中失败了,所以感谢您更新帖子;-)utcnow