(Здесь нет кода, поскольку я никогда не использовал 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 изменить свои даты на эти календари?И если бы это было так.как бы я перешел с григорианского на исламский?
Боюсь, я не знаю на этом фронте.