Подтвердить что ты не робот

Цель C - получить следующий день с сегодняшнего дня (завтра)

Как я могу проверить, является ли дата неотъемлемой частью TOMORROW?

Я не хочу добавлять часы или что-нибудь в такую ​​дату, как сегодня, потому что если сегодня уже есть 22:59, добавление слишком большого количества будет продолжаться на следующий день и добавление слишком мало, если время 12:00 пропустит завтра.

Как я могу проверить два NSDate и убедиться, что один из них эквивалентен завтра другому?

4b9b3361

Ответ 1

Используя NSDateComponents, вы можете извлечь компоненты день/месяц/год с сегодняшней даты, игнорируя компоненты час/минуты/секунды, добавьте один день и перестройте дату, соответствующую завтра.

Итак, представьте, что вы хотите добавить ровно один день к текущей дате (включая информацию о часах/минутах/секундах, такую ​​же как дата "сейчас" ), вы можете добавить timeInterval 24 * 60 * 60 секунд, чтобы "теперь" используя dateWithTimeIntervalSinceNow, но лучше (и DST-proof и т.д.) сделать это таким образом, используя NSDateComponents:

NSDateComponents* deltaComps = [[[NSDateComponents alloc] init] autorelease];
[deltaComps setDay:1];
NSDate* tomorrow = [[NSCalendar currentCalendar] dateByAddingComponents:deltaComps toDate:[NSDate date] options:0];

Но , если вы хотите сгенерировать дату, соответствующую завтра в полночь, вместо этого вы можете просто получить компоненты месяца/дня/года текущей даты, без часов/мин/secs part и добавьте 1 день, а затем перестройте дату:

// Decompose the date corresponding to "now" into Year+Month+Day components
NSUInteger units = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *comps = [[NSCalendar currentCalendar] components:units fromDate:[NSDate date]];
// Add one day
comps.day = comps.day + 1; // no worries: even if it is the end of the month it will wrap to the next month, see doc
// Recompose a new date, without any time information (so this will be at midnight)
NSDate *tomorrowMidnight = [[NSCalendar currentCalendar] dateFromComponents:comps];

PS: вы можете прочитать действительно полезные советы и информацию о концепциях даты в Руководство по программированию даты и времени, особенно здесь о компонентах даты.

Ответ 2

В iOS 8 есть метод удобства на NSCalendar, называемый isDateInTomorrow.

Objective-C

NSDate *date;
BOOL isTomorrow = [[NSCalendar currentCalendar] isDateInTomorrow:date];

Swift 3

let date: Date
let isTomorrow = Calendar.current.isDateInTomorrow(date)

Swift 2

let date: NSDate
let isTomorrow = NSCalendar.currentCalendar().isDateInTomorrow(date)