Как рассчитать точную годовщину гибели Титаника

да, это вопрос программирования iOS.

Мне нужно рассчитать точное время, когда Титаник затонул к своему 100-летнему юбилею.

It sunk at 15th April 1912 2:20 a.m. 

Глупый вопрос вы говорите. 100-летний юбилей

15th April 1912 2:20 a.m. 
+100 years
15th April 2012 2:20 a.m. 

Но я хочу, чтобы будильник срабатывал точно в любом часовом поясе мира, и мне нужно обрабатывать часовые пояса, а также такие вещи, как британское летнее время, опережающее на один час, но оно не вступало в силу до 1918 года .... но на сегодняшний день 25 марта 2012 г. Лондон находится в BST, так что на час вперед.

Я запутался в часовых поясах. У нас есть GMT и UTC. Корабли затонули в точке с координатами 49° 56' 49" з.д., 41° 43' 32" северной широты, то есть на несколько часов раньше Лондона. -49,94822196927015 41,72713826043066

Whats the correct way to enter a historic date into NSCalendar 
and to add 100 years to it exactly and get back the right time 
in the users current timezone?

Я заметил форматы японского и исламского календаря в параметрах NSCalendar. Может ли устройство iOS изменить свои даты на эти календари? И если бы это было так. как бы я преобразовал из григорианского в исламский?

хорошая головоломка для начала недели :)


person brian.clear    schedule 25.03.2012    source источник


Ответы (1)


(Здесь нет кода, так как я никогда не использовал API iOS. Однако у меня есть некоторый опыт работы с API даты/времени и странностями, которые они вызывают, поэтому я надеюсь, что вы все равно найдете этот ответ полезным.)

Каков правильный способ ввести историческую дату в NSCalendar, добавить к ней ровно 100 лет и вернуть правильное время в текущем часовом поясе пользователя?

Это действительно зависит от того, что вы подразумеваете под «100 годами» — на самом деле это не фиксированное количество времени.

Я бы взял момент UTC, в который он затонул, применил локальный часовой пояс пользователя, а затем добавил бы к этому сотню лет. Однако тогда вам нужно учитывать, что результат может на самом деле не быть действительным местным временем в этом часовом поясе.

Например, предположим, что вы находитесь в часовом поясе, где в момент затопления было 1:20 ночи... но в этом часовом поясе 15 апреля 2012 года часы меняются - и они перескакивают с 1:00 на 2:00. В этом случае 1:20 никогда не наступает... поэтому вы потенциально можете выбрать 12:20, момент перед переходом на летнее время, момент перехода на летнее время или 2:20, в зависимости от того, что вы считаете подходящим.

Другой вариант, который можно рассмотреть, противоположен — предположим, что это переход на летнее время, который происходит с 2:00 до 1:00... так что 1:20 на самом деле происходит дважды. Что бы вы хотели сделать в таком случае? Вероятно, вы не должны заставлять свое приложение отмечать годовщину дважды!

Другой вариант, который устраняет эту возможность двусмысленности и несоответствия, состоит в том, чтобы выяснить, каково было смещение от UTC в часовом поясе пользователя в точное время затопления, а затем добавить 100 лет к значению UTC (которое никогда не будет переходов на летнее время) и снова применить то же смещение.

Я заметил форматы японского и исламского календаря в параметрах NSCalendar. Может ли устройство iOS изменить свои даты на эти календари? И если бы это было так. как бы я преобразовал из григорианского в исламский?

Боюсь, я не знаю на этот счет.

person Jon Skeet    schedule 25.03.2012