CE-6ren">
gpt4 book ai didi

swift - "CEST"时区在向/从夏令时转换期间将偏移量更改为 GMT(不应该)

转载 作者:行者123 更新时间:2023-11-28 05:36:05 34 4
gpt4 key购买 nike

UIKit 提供了 TimeZone.secondsFromGMT() 方法,它只返回 GMT 时间的秒数。

截至 10 月 27 日,该函数返回不正确的值,当时欧洲离开了夏令时 (CEST-> CET)。目前返回 3600,10 月 27 日之前,正确返回 7200。

此函数应始终返回与当前时区无关的常量值 7200(夏令时更改时区,而不是时区本身)。即使欧洲在冬天进入 CET 时间,CEST 时间也没有改变(欧洲现在不“使用”它)。

此行为破坏了我的单元测试,因此破坏了应用程序的正确性。

实际上这应该总是通过:

让 timeZone = TimeZone(缩写:“CEST”)!XCTAssertTrue(timeZone.secondsFromGMT() == 7200)

我是不是想错了?

最佳答案

你的误解在这里:

(Daylight savings change timezones, not timezone itself). Even if Europe went to the CET time during the winter, CEST time didn’t change (Europe just doesn’t “use” it now).

您所说的是补偿TimeZone 对象能够表示偏移量,即通过使用 init(secondsFromGMT:) 初始化程序创建一个。但在大多数情况下,考虑时区(例如 Europe/Paris)更有用。

init(abbreviation:) 只是查找您在 TimeZone.abbreviationDictionary 中传递的字符串,并将查找到的值用作时区标识符。通过简单的检查,您会发现在字典中,CEST 对应于值 Europe/Paris

标识符Europe/Paris代表法国采用的时区。使用此标识符创建的 TimeZone 对象封装了所有历史偏移量转换以及 future 转换的转换规则(例如“DST 在 10 月 25 日或之后的第一个星期日结束”)。

换句话说,TimeZone 对象不仅仅是距 GMT 的秒数。它更像是一个数学函数,将时间点映射到本地日期时间。这个函数大部分是连续的,除了发生偏移转换的那些时间点。

如果您只想要 7200 秒的恒定偏移量,请执行以下操作:

TimeZone(secondsFromGMT: 7200)

关于swift - "CEST"时区在向/从夏令时转换期间将偏移量更改为 GMT(不应该),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58603747/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com