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

Posted

技术标签:

【中文标题】Python 中的日期可以感知时区吗?【英文标题】:Can Dates be Timezone-Aware in Python? 【发布时间】:2017-10-10 20:59:48 【问题描述】:

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

from datetime import datetime
import pytz

now_utc = datetime.utcnow()

产生:

datetime.datetime(2017, 5, 11, 17, 37, 5, 602054)

您可以使用

使该日期时间知道其时区(例如,断言两个不同的日期时间对象来自同一时区)
now_utc_aware = datetime.now(pytz.utc) 

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

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

now_utc_aware.date()

datetime.date(2017, 5, 11)

有趣的是,there's a SO question 似乎正是在问这个问题,特别是关于一个日期(datetime.today()),但答案(包括一个接受的答案)与日期时间有关。我看到的将时区感知添加到日期时间的代码似乎都在我的 datetime.date 对象上引发了错误。

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

【问题讨论】:

为什么,更重要的是,如何?时区的基本方面是时间偏移。日期仅在改变全年调整时间的方式中起次要作用。如果您将意识添加到约会中,它会是什么样子?哪些操作有意义? 我想象这样一种情况,您在不同的软件中使用datetime.today() 记录事件,在不同的表中记录信息。在日期加入表的人可能想要确认dates 都指的是相同的日期,即.today()s 使用相同的时区而不是不同的本地时区记录。 我同意你的问题,尽管时间感知的概念对于日期来说远不如日期时间那么简单。也许是没有意义的。因此,我的问题是“日期可以感知时间”而不是“我如何让日期感知时间?” 【参考方案1】:

来自the Python docs:

日期时间。日期 一个理想化的幼稚日期,... 属性:年、月、日。

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

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

作为一个现实世界的类比,将日期视为日历上的一个正方形。如果不引入时间,就不能开始谈论时区,时间是用时钟而不是日历来衡量的。

【讨论】:

以上是关于Python 中的日期可以感知时区吗?的主要内容,如果未能解决你的问题,请参考以下文章

python中的时区感知与时区天真

如何在python中获取时区感知午夜日期时间? [复制]

Python - 给定一个时区感知的日期时间对象,我如何获得一个时区朴素的 UTC 日期时间对象?

如何在 Python 中结合时区感知日期和时间?

在 Python 中获取随机时区感知日期时间

Python 中的 datetime.fromtimestamp(os.path.getctime()) 是不是给了我一个时区感知值?