ios - 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?或者这是操作系统的限制?
解决方案
这是一个有趣的场景,但您对此无能为力。大多数设备上自动时区设置功能的内部行为不是您作为程序员可以控制的。在某些情况下,有一个可以改变时区的信号塔信号,而在其他情况下,GPS 坐标使用内部地图数据与时区交叉引用。在这两种情况下,除了禁用自动时区功能并手动设置时区之外,您不能对不正确的设置采取任何措施。
此外,虽然陆地(以及周围领海)的时区定义明确,但海上时区却没有。虽然人们可以猜测船长可能想切换到纵向线或国际日期变更线上的另一个时区,但现实情况是,船长或飞机的船长可以将他们的时钟设置为他们希望的任何时区,在旅途中的任何一点。根据航程的长度,选择一个任意的中途点来切换时钟,或者在到达目的地之前不理会船上的时钟,这种情况并不少见。
我能给出的最佳建议是告诉用户应用程序将响应设备上的时区更改,并且由他们自行决定更改设备的时区。
推荐阅读
- azure - 如何将文件从逻辑应用程序发送到功能应用程序?
- java - JAVA正则表达式查找字符串
- java - 在 Java 中不使用 Arraylist 的情况下为类制作动态数组,并且没有正确教授如何去做
- python - 在 python 中找到连续的日子
- node.js - Grunt CLI 在尝试编译 bootstrap.less 时崩溃
- angular - 如何将工件从 NPM 构建复制到 TSFS 中的 .NET Core 部署
- entity-framework - 使用 linq 和 entityframework 合并多项选择的结果
- javascript - 删除所有 CK Editor 实例
- tree - 无法使用 SystemJS.config.js 加载 ng2-tree
- swift - 如何在 for 循环中创建对象并保存核心数据,而不是每次都覆盖?