NSDate между двумя данными NSDates

Я интересуюсь созданием метода, чтобы найти, падает ли текущая дата между определенными временами в какой-либо данный день. Это для программы планирования, таким образом, я хочу найти то, что событие имеет место в текущее время. Каждый день имеет тот же набор времен: 820-900, 900-940, 940-1020, и т.д. Так как это должно быть сделано в любой данный день, который я не знаю, как создать NSDate с определенным временем. Я думаю, что это могло бы быть сделано с NSTimeInterval, но я не уверен, как инстанцировать этого.

7
задан skaffman 1 January 2010 в 00:22
поделиться

3 ответа

Это не идеально, но вы можете использовать [NSDate comparison:] для проверки даты по обеим границам:

NSDate *firstDate = ...
NSDate *secondDate = ...

NSDate *myDate = [NSDate date];

switch ([myDate compare:firstDate]) {
    case NSOrderedAscending:
        NSLog(@"myDate is older");
        // do something
        break;
    case NSOrderedSame:
        NSLog(@"myDate is the same as firstDate");
        // do something
        break;
    case NSOrderedDescending:
        NSLog(@"myDate is more recent");
        // do something
        break;
}

switch ([myDate compare:secondDate]) {
    case NSOrderedAscending:
        NSLog(@"myDate is older");
        // do something
        break;
    case NSOrderedSame:
        NSLog(@"myDate is the same as secondDate");
        // do something
        break;
    case NSOrderedDescending:
        NSLog(@"myDate is more recent");
        // do something
        break;
}

Или короче:

BOOL between = NO;

if (([myDate compare:firstDate] == NSOrderedDescending) &&
    ([myDate compare:secondDate] == NSOrderedAscending)) {

    between = YES;
}

Я уверен, что есть лучший способ сделать сложное сравнение дат, но это должно работать.

Я уверен, что есть лучший способ сделать сложное сравнение дат.
26
ответ дан 6 December 2019 в 05:01
поделиться

Самым простым способом сделать это было бы использовать -timeIntervalSinceReferenceDate, чтобы превратить каждую из Ваших дат в NSTimeInterval, набранное значение, которое на самом деле является просто double.

NSTimeInterval rightNow = [[NSDate date] timeIntervalSinceReferenceDate];

Отсюда определение того, находится ли дата между любыми двумя датами, является всего лишь вопросом простых числовых сравнений.

Если Вам необходимо преобразовать строковое представление даты в экземпляр NSDate, чтобы затем получить временной интервал, используйте NSDateFormatter.

Если Вам необходимо создать дату из известных компонентов даты, используйте NSCalendar. (т.е. Вы знаете, что год - 2010, месяц - 4, а день - 12, Вы можете использовать компоненты NSCalendar для создания экземпляра NSDate методом -dateFromComponents:).

Как указал Бен, интерфейс компонента NSCalendar's также может быть использован для поиска часа и минуты, чтобы определить, находится ли он в диапазоне (что, казалось бы, является нетипичным использованием в том, что - большинство событий происходят не каждый день в одно и то же время... но... конечно... для этого тоже есть причины!)

.
11
ответ дан 6 December 2019 в 05:01
поделиться

Взгляните на -[NSCalendar components:fromDate:]. Это позволит Вам "разложить" дату на различные ее компоненты, а затем, в данном примере, посмотреть на часы и минуты.

.
4
ответ дан 6 December 2019 в 05:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: