Часовой пояс в iPhone не подходит для Тонги

#ios #swift #iphone #timezone #timezone-offset

Вопрос:

У меня есть пользователь в Тонге (Уоллис/Футуна и Тонга), для которого мое приложение работает неправильно. Что бы я ни делал, часовой пояс в Тонге неправильно рассчитан в 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? Или это ограничение операционной системы?

Комментарии:

1. В каком часовом поясе у них установлено устройство? Уоллис/Футуна-GMT 12, а Тонга-GMT 13. Это разные страны с разными часовыми поясами. Если я настрою свое устройство вручную на каждый из этих часовых поясов, я получу правильный ответ. Если я установлю часовой пояс на Нукуалофа TimeZone.autoUpdatingCurrent , это будет «Тихий океан/Тонгатапу» с 46800 секундами по Гринвичу. Мата-Уту, с другой стороны, это «Пацифик/Уоллис» и 43200

2. Спасибо, Полв11. Я установил часовой пояс своего компьютера на «Мата-Улу — Уоллис и Футура» и получил 12 в симуляторе iPhone. Установка значения «Нуку-алофа — Тонга» привела к 13. Таким образом, похоже, что пользователь путешествовал между двумя регионами (он капитан корабля), и часовой пояс его телефона не обновлялся должным образом..

Ответ №1:

Это интересный сценарий, но вы мало что можете с этим поделать. Внутреннее поведение функции автоматической настройки часового пояса на большинстве устройств не является чем-то, что вы, как программист, можете контролировать. В некоторых случаях есть сигнал вышки сотовой связи, который может изменить часовой пояс, а в других случаях координаты GPS сопоставляются с часовым поясом с использованием внутренних картографических данных. Ни в том, ни в другом случае вы не можете ничего сделать с неправильной настройкой, кроме как отключить функцию автоматического часового пояса и установить часовой пояс вручную.

Кроме того, в то время как часовые пояса на суше (и в окружающих территориальных водах) четко определены, часовые пояса на море-нет. Хотя можно предположить, что капитан может захотеть переключиться на другой часовой пояс по продольной линии или по международной линии дат, реальность такова, что капитан корабля или самолета может установить свои часы в любом часовом поясе, который он пожелает, в любой момент путешествия. Нередко можно выбрать произвольную точку на полпути, чтобы переключить часы, или оставить корабельные часы в покое до прибытия в пункт назначения, в зависимости от продолжительности рейса.

Лучший совет, который я могу дать, — сообщить пользователю, что приложение будет реагировать на изменения часового пояса на устройстве, и они могут изменять часовой пояс устройства по своему усмотрению.

Комментарии:

1. Спасибо. Я реализовал обходной путь для этой проблемы, так как в результате моих расчетов с использованием часового пояса был 1 выходной день. Если я вижу очень большую ошибку в расчетном времени (> 24 часов), я вычитаю 24 часа. Это должно решить проблему, но я согласен, что это действительно угловой сценарий, который происходит в самолете или на корабле.