"CEST" 时区在转换期间将偏移量更改为 GMT to/from 夏令时(不应该)
"CEST" timezone changes offset to GMT during transition to/from Daylight Saving Time (it shouldn't)
UIKit 提供 TimeZone.secondsFromGMT() 方法,它简单地 returns 从 GMT 时间开始的秒数。
截至 10 月 27 日,函数 return 的值不正确,当时欧洲离开了夏令时 (CEST-> CET)。目前 return 是 3600,在 10 月 27 日之前,它 return 正确地是 7200。
此函数应始终 return 恒定值 7200,与当前时区无关(夏令时更改时区,而不是时区本身)。即使欧洲在冬天进入CET时间,CEST时间也没有改变(欧洲现在不“使用”它)。
此行为破坏了我的单元测试,因此破坏了应用程序的正确性。
实际上这应该总是通过:
let 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).
你说的是 offsets。 TimeZone
对象能够表示偏移量,即通过使用 init(secondsFromGMT:)
初始化程序创建一个。但在大多数情况下,考虑时区,例如 Europe/Paris
更有用。
init(abbreviation:)
只是查找您在 TimeZone.abbreviationDictionary
中传递的字符串,并将查找到的值用作时区标识符。通过简单的检查,你会发现在字典中, CEST
对应于值 Europe/Paris
.
标识符Europe/Paris
代表法国采用的时区。使用此标识符创建的 TimeZone
对象封装了所有历史偏移量转换以及未来转换的转换规则(例如 "DST ends on the first Sunday on or after 25 Oct")。
换句话说,一个TimeZone
对象不仅仅是距格林威治标准时间的秒数。它更像是一个数学函数,将时间点映射到本地日期时间。这个函数大部分是连续的,除了发生偏移转换的那些时间点。
如果您只想要 7200 秒的恒定偏移量,请执行:
TimeZone(secondsFromGMT: 7200)
UIKit 提供 TimeZone.secondsFromGMT() 方法,它简单地 returns 从 GMT 时间开始的秒数。
截至 10 月 27 日,函数 return 的值不正确,当时欧洲离开了夏令时 (CEST-> CET)。目前 return 是 3600,在 10 月 27 日之前,它 return 正确地是 7200。
此函数应始终 return 恒定值 7200,与当前时区无关(夏令时更改时区,而不是时区本身)。即使欧洲在冬天进入CET时间,CEST时间也没有改变(欧洲现在不“使用”它)。
此行为破坏了我的单元测试,因此破坏了应用程序的正确性。
实际上这应该总是通过:
let 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).
你说的是 offsets。 TimeZone
对象能够表示偏移量,即通过使用 init(secondsFromGMT:)
初始化程序创建一个。但在大多数情况下,考虑时区,例如 Europe/Paris
更有用。
init(abbreviation:)
只是查找您在 TimeZone.abbreviationDictionary
中传递的字符串,并将查找到的值用作时区标识符。通过简单的检查,你会发现在字典中, CEST
对应于值 Europe/Paris
.
标识符Europe/Paris
代表法国采用的时区。使用此标识符创建的 TimeZone
对象封装了所有历史偏移量转换以及未来转换的转换规则(例如 "DST ends on the first Sunday on or after 25 Oct")。
换句话说,一个TimeZone
对象不仅仅是距格林威治标准时间的秒数。它更像是一个数学函数,将时间点映射到本地日期时间。这个函数大部分是连续的,除了发生偏移转换的那些时间点。
如果您只想要 7200 秒的恒定偏移量,请执行:
TimeZone(secondsFromGMT: 7200)