首页 > 解决方案 > iPhone 中的时区对汤加来说是错误的

问题描述

我在汤加(瓦利斯/富图纳和汤加)有一个用户,我的应用程序无法正常工作。无论我做什么,汤加的时区都没有在 iPhone 中正确计算。

以下所有这些代码都返回 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?或者这是操作系统的限制?

标签: iosswiftiphonetimezonetimezone-offset

解决方案


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

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

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


推荐阅读