Например, я пытался представить что-то вроде 8:00 утра
[NSDate dateWithTimeIntervalSince1970:(8 * 60 * 60)]
Но проблема в том, что это означает 8 часов утра по Гринвичу, а не в местном часовом поясе ...
Нет, проблема в том, что это означает 8 часов утра по Гринвичу 1 января 1970 года.
Объект NSDate не выражен ни в каком календаре или часовом поясе. Объект NSDate - это исторический момент, не более того. Вам нужен объект календаря, чтобы преобразовать его в представление календаря или из него (например, год, месяц, день месяца, час, минута, секунда) или средство форматирования даты, чтобы преобразовать его в строковое представление или из него (например, «2010-10-15T22: 29: 27-0700».)
Если вы хотите вычислить NSDate для 8 утра сегодня, создайте объект NSCalendar и спросите его, когда это . Используйте components:fromDate:
, чтобы повернуть прямо сейчас ([NSDate date]
) в компоненты даты, затем переписать часы, минуты и секунды и преобразовать обратно.
UIDatePicker (такой, который вы, вероятно, должны представить пользователю, чтобы он мог выбрать дату и время их тревоги), даст вам NSDate; нет необходимости выполнять какие-либо преобразования или манипуляции с ним. Максимум, что вам может понадобиться, это вычесть некоторое время, если пользователь решил, чтобы вы включили будильник намного раньше фактического события.
Итак, я думаю, что все сводится к тому, как мне представить 8:00 утра, например, в системном часовом поясе таким образом, чтобы NSDateFormatter правильно отформатировал его как местное время?
NSDateFormatter принимает NSDate, и, как я уже сказал, NSDates не находятся в часовом поясе. Как вы видели, ваш форматировщик даты будет использовать часовой пояс пользователя по умолчанию (хотя это явно не указано в документации). Чтобы форматировщик даты использовал что-то другое, вы должны были бы сделать это.