Добавление двух NSDate - PullRequest
2 голосов
/ 10 мая 2010

У меня есть два NSDate, дата и время. Я хотел бы добавить их таким образом, чтобы получить дату от даты и время от времени. Любые предложения о том, как мне это сделать?

Приветствия

Nik

Ответы [ 3 ]

2 голосов
/ 10 мая 2010

Если я правильно понял, NSDate s -dateByAddingTimeInterval: вместе с -timeIntervalSinceDate: - это то, что вы ищете.

hth
–f

1 голос
/ 11 мая 2010

У меня есть два 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.

1 голос
/ 10 мая 2010

Используйте NSCalendar s components:fromDate:, чтобы получить компоненты двух дат.
Затем при необходимости соберите их, используя dateFromComponents:.

...