iPhone 的时区对汤加来说是错误的

Timezone in iPhone is wrong for Tonga

我在汤加(Wallis/Futuna 和汤加)有一个用户,我的应用无法正常运行。无论我做什么,汤加的时区在 iPhone.

中计算不正确

所有这些以下代码 return 12:

let tZone1: Double = Double(NSTimeZone.system.secondsFromGMT()) / 3600.0
let tZone2: Double = Double(TimeZone.current.secondsFromGMT()) / 3600.0
let tZone3: Double = Double(NSTimeZone.default.secondsFromGMT() ) / 3600.0
let tZone4: Double = Double(TimeZone.current.secondsFromGMT(for: Date()) ) / 3600.0

时区缩写为“GMT+12”

let tZoneAbr = TimeZone.current.abbreviation()

尽管汤加的正确时区是 GMT+13(纬度:-12.1333,经度:-175.3)。

有什么方法可以让我正确计算时区为 +13?还是 OS 限制?

这是一个有趣的场景,但您对此无能为力。大多数设备上自动时区设置功能的内部行为不是您作为程序员可以控制的。在某些情况下,手机信号塔信号可以改变时区,而在其他情况下,GPS 坐标使用内部地图数据与时区交叉引用。在这两种情况下,除了禁用自动时区功能并手动设置时区之外,您无法对不正确的设置做任何事情。

此外,虽然陆地(和周围领海)的时区定义明确,但海上时区却没有。虽然可以猜到船长可能想在经线或国际日期变更线上切换到另一个时区,但现实是船长或飞机的船长可以将他们的时钟设置为他们希望的任何时区,在旅途中的任何一点。根据航程的长短,随意选择一个中途点切换时钟,或者在到达目的地之前不理会船上的时钟,这种情况并不少见。

我能给出的最佳建议是告诉用户应用程序将响应设备上的时区更改,并且由他们自行决定更改设备的时区。