Я интересуюсь созданием метода, чтобы найти, падает ли текущая дата между определенными временами в какой-либо данный день. Это для программы планирования, таким образом, я хочу найти то, что событие имеет место в текущее время. Каждый день имеет тот же набор времен: 820-900, 900-940, 940-1020, и т.д. Так как это должно быть сделано в любой данный день, который я не знаю, как создать NSDate с определенным временем. Я думаю, что это могло бы быть сделано с NSTimeInterval, но я не уверен, как инстанцировать этого.
Это не идеально, но вы можете использовать [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;
}
Я уверен, что есть лучший способ сделать сложное сравнение дат, но это должно работать.
Я уверен, что есть лучший способ сделать сложное сравнение дат. Самым простым способом сделать это было бы использовать -timeIntervalSinceReferenceDate
, чтобы превратить каждую из Ваших дат в NSTimeInterval
, набранное значение, которое на самом деле является просто double
.
NSTimeInterval rightNow = [[NSDate date] timeIntervalSinceReferenceDate];
Отсюда определение того, находится ли дата между любыми двумя датами, является всего лишь вопросом простых числовых сравнений.
Если Вам необходимо преобразовать строковое представление даты в экземпляр NSDate, чтобы затем получить временной интервал, используйте NSDateFormatter.
Если Вам необходимо создать дату из известных компонентов даты, используйте NSCalendar. (т.е. Вы знаете, что год - 2010, месяц - 4, а день - 12, Вы можете использовать компоненты NSCalendar для создания экземпляра NSDate методом -dateFromComponents:
).
Как указал Бен, интерфейс компонента NSCalendar's также может быть использован для поиска часа и минуты, чтобы определить, находится ли он в диапазоне (что, казалось бы, является нетипичным использованием в том, что - большинство событий происходят не каждый день в одно и то же время... но... конечно... для этого тоже есть причины!)
.Взгляните на -[NSCalendar components:fromDate:]. Это позволит Вам "разложить" дату на различные ее компоненты, а затем, в данном примере, посмотреть на часы и минуты.
.