У меня есть два NSDate, дата и время.
Звучит так, словно ты ошибаешься.
NSDate представляет определенный момент времени (X секунд с начала эпохи). NSDate - это не просто «x часов» или «эта дата в календаре», и вы не должны пытаться объединять их, как если бы они были, потому что такие эффекты, как DST, могут сделать ваши вычисления неправильными (в некоторых часовых поясах, некоторые даты имеют два часа по 1:00, а некоторые по 2 часа).
Рассмотрите возможность использования NSDatePicker или UIDatePicker (в зависимости от ситуации), чтобы позволить пользователю вводить дату и время из одного места. Вам не только легче это делать, но и более точные результаты.
Если вы читаете две части по отдельности из файла или аналогичного источника и не управляете форматом (поэтому вы не можете приказать стороне генерирования выдавать даты с их временами в одном значении), вы ' нужно будет сделать одну из двух вещей:
Если возможно, объедините две строки. Например, дата ISO 8601 (например, «2010-05-10») и время ISO 8601 (например, «23: 20: 19-0700») могут быть объединены с буквой «T» между ними, чтобы сформировать действительный , полностью определенная дата ISO 8601 («2010-05-10T23: 20: 19-0700»). Затем вы можете передать эту единственную строку правильно настроенному NSDateFormatter.
Если по какой-то причине вы не можете осмысленно объединить строки, проанализируйте их самостоятельно и заполните один объект NSDateComponents самостоятельно.
Это не будет приятно, но правильность важна, и ошибка (неправильный анализ даты), которая возникает только через два часа в году только для некоторых ваших пользователей, будет сводить с ума.
Цель - создать ровно один объект NSDate, который полностью описывает дату и время, о которых идет речь. Это единственный способ гарантировать, что при любых обстоятельствах вы получите правильное значение NSDate.