2016-11-07 5 views
1

Поскольку NSDate представляет собой «единую точку во времени, независимо от какой-либо конкретной календарной системы или часового пояса», нормально ли делать прямые вычисления с секундами, заданными его методами, такими как timeIntervalSince1970?Можно ли работать с секундами, произведенными NSDate timeIntervalSince1970?

То есть операции, как добавление и вычитания из двух NSTimeInterval (AKA double) значений, а не с помощью dateByAddingTimeInterval: или NSCalendar метода, как - (nullable NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSCalendarOptions)opts.

Какие проблемы будут иметь такие прямые вычисления?

+1

В большинстве случаев может быть лучше использовать 'NSDateComponents', потому что, например, есть дневные дневники, если сегодня это 2PM, завтра на 2 вечера может не быть 24h, но 23 или 25. – Larme

+1

Не видя каких-либо конкретных примеров того, что вы имеете в виду, всегда лучше использовать 'dateByAddingComponents'. Но могут быть случаи, когда работа с использованием секунд в порядке. Но, не зная, что вы действительно хотите сделать, единственной безопасной рекомендацией является использование «dateByAddingComponents». – rmaddy

ответ

1

Добавление может иметь меньший смысл, но вычитание имеет смысл, если вы хотите найти разницу во времени между двумя датами.

Что вы хотите отметить, однако, заключается в том, что вы должны идти только на разницу в секунды, минуты, часы, дни, недели с вашего вычитанием

Но найти разницу в месяцах и годах, вы хотите для использования API NSDate. Месяцы и годы не являются постоянными

Аналогичным образом с добавлением дат, если вы хотите добавить секунды, минуты, часы, дни, недели. Они постоянны и легко добавляются. Но месяцы и годы вас отпустят

+0

Один раз в год в течение 23 или 25 часов. Время от времени происходит прыжок. Минуты, часы, дни и недели НЕ постоянны. – Willeke

+0

Вы говорите, что возможно, если бы у вас NSDate для 'now' и 24 часа в будущем, а затем вычитал два, вы могли бы получить число больше 24 * 60 * 60 * 1000, если бы второй прыжок в? Я не уверен, как они не будут постоянными? –

+0

Я не знаю о втором прыжке, но я уверен в 23 и 25 часах. – Willeke