Python 3.6 本地时间消歧 (PEP 495)

Boš*_*jak 5 python-3.6

我有一些关于 PEP 495 的问题。

datetime模块中的类(嗯,其中一些)现在接受一个fold参数,该参数0默认值为,并且该值也可以设置为1

例如,datetime.datetime(..., fold=1)

在我的国家(斯洛文尼亚、中欧),我们在凌晨 2 点和凌晨 3 点之间将时间提前一小时和一小时。在其他国家,我认为是在凌晨 1 点到凌晨 2 点之间。

第一个问题:这是否fold足以确定夏令时是在凌晨 2 点到凌晨 3 点之间设置还是在凌晨 1 点到凌晨 2 点之间设置?

第二个问题:所以设置fold1考虑到夏令时,对吗?这是它的作用吗?

第三个问题:我对fold论证的理解是否正确?

Fel*_*lix 6

什么是折叠?

折叠是不明确的当地时间。每当时钟向后移动时就会发生这种情况。以下次德国的变化为例:

2017 年 10 月 29 日凌晨 3 点,时钟将重新设置为凌晨 2 点。

现在想象一下,您告诉某人您想在 2017 年 10 月 29 日凌晨 2:30 见面。你的意思是在时间变化发生之前还是之后?这是模棱两可的,因为时钟有两个时间点显示这个确切时间。

PEP 495 添加的 fold 属性正好提供了该信息。时间更改的时间为 0,更改的时间为 1 。

PEP 495 中是这样描述的:

此 PEP 向 datetime.time 和 datetime.datetime 类的实例添加了一个新属性折叠,可用于区分本地时间相同的两个时刻。fold 属性的允许值将是 0 和 1,其中 0 对应于不明确的本地时间的两个可能读数中的较早者,而 1 对应于较晚者。

夏令时和datetime对象

从 python日期时间文档:

有两种日期和时间对象:“naive”和“aware”。

感知对象具有足够的适用算法和政治时间调整知识,例如时区和夏令时信息,以相对于其他感知对象定位自身。有意识的对象用于表示不可解释的特定时刻[1]。

一个天真的对象不包含足够的信息来明确地相对于其他日期/时间对象定位自己。一个简单的对象是否代表协调世界时 (UTC)、本地时间或其他时区的时间完全取决于程序,就像特定数字代表米、英里或质量取决于程序一样。朴素的对象易于理解和使用,但代价是忽略了现实的某些方面。

对于需要感知对象的应用程序,日期时间和时间对象具有可选的时区信息属性 tzinfo,可以将其设置为抽象 tzinfo 类的子类的实例。这些 tzinfo 对象捕获有关与 UTC 时间的偏移量、时区名称以及夏令时是否生效的信息。请注意,datetime 模块仅提供一个具体的 tzinfo 类,即时区类。timezone 类可以表示与 UTC 具有固定偏移量的简单时区,例如 UTC 本身或北美 EST 和 EDT 时区。在更深层次的细节支持时区取决于应用程序。世界各地的时间调整规则政治性多于理性,变化频繁,除UTC之外没有适用于所有应用的标准。

特尔;博士:

标准库提供:

  • 明确的本地时间(使用 fold 参数表示不明确的时间)。
  • 可用于实现时区和夏令时信息的对象的tzinfo属性datetime

标准库不提供:

  • 知道夏令时的不同时区之间的时间转换。

回答您的问题

这个折叠是否足够智能来确定夏令时是设置在凌晨 2 点到凌晨 3 点之间还是设置在凌晨 1 点到凌晨 2 点之间?

不,它不是,甚至 python 标准库都没有提供这个。我确信有第三方库可以做到这一点,但直到现在我还没有使用过其中的任何一个。

所以将 fold 设置为 1 是考虑到夏令时,对吗?这是它的作用吗?

并不真地。fold 参数的含义更像是“这是时钟显示的第一次还是第二次”。对于(通常)时钟向后移动的一小时,您只需要此参数。除了这种情况,本地时间是明确的,因此您不需要 fold 参数。是否为夏令时与争论无关。

我对折叠参数的理解是否正确?

不是真的,但我希望我可以通过上面的答案阐明一些观点。