Как рассчитать точную годовщину гибели Титаника - PullRequest
1 голос
/ 25 марта 2012

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

Мне нужно рассчитать точное время, в течение которого RMS Titanic затонула к 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' W, 41 ° 43 '32' N, так что на несколько часов впереди Лондона. -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 изменить свои даты на эти календари? И если бы это было так. как бы я перешел с григорианского на исламский?

хорошая головоломка, чтобы начать свою неделю:)

1 Ответ

1 голос
/ 25 марта 2012

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

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

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

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

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

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

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

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

Боюсь, я не знаю на этом фронте.

...