Python 中的日期可以感知时区吗?

Max*_*wer 4 python timezone datetime date pytz

关于确保日期时间是特定时区有很多答案。例如,您可以确保您的日期时间是 UTC

from datetime import datetime
import pytz

now_utc = datetime.utcnow()
Run Code Online (Sandbox Code Playgroud)

产生:

日期时间. 日期时间(2017, 5, 11, 17, 37, 5, 602054)

您可以使该日期时间了解其时区(例如,断言两个不同的日期时间对象来自同一时区)

now_utc_aware = datetime.now(pytz.utc) 
Run Code Online (Sandbox Code Playgroud)

datetime.datetime(2017, 5, 11, 17, 38, 2, 757587, tzinfo=< UTC>)

但是,当我从时区感知的日期时间中提取日期时,我似乎失去了时区感知。

now_utc_aware.date()
Run Code Online (Sandbox Code Playgroud)

日期时间.日期(2017, 5, 11)

有趣的是,有一个 SO 问题似乎正是在问这个问题,并且特别是关于日期(datetime.today()),但答案(包括已接受的答案)与日期时间相关。我见过的为日期时间添加时区感知的代码似乎都会在我的datetime.date对象上引发错误。

是否可以向日期对象添加时区感知?

Mat*_*int 5

来自Python文档

班级日期时间。日期
理想化的朴素日期,...属性:年、月、日。

那里没有时间或时区。这只是一个约会。

虽然地球上并非所有地方都同时处于同一日期(由于时区的原因),但这并不意味着日期本身具有时区意识。

作为现实世界的类比,将日期视为日历上的一个正方形。谈论时区就不能不介绍时间,时间是通过时钟而不是日历来测量的。