Сравнивая время двух NSDates, игнорируя компонент даты
Я хочу сравнить два NSDates с NOW ([NSDate date]).
NSDate *date1 = [NSDate dateWithString:@"1982-02-12 07:00:00 +0100"];
NSDate *now = [NSDate dateWithString:@"2012-01-25 10:19:00 +0100"]; //example
NSDate *date2 = [NSDate dateWithString:@"1989-02-12 15:00:00 +0100"];
Я хотел бы проверить, теперь ли это между датой 1 и датой2. В приведенном выше примере это так. Компонент даты должен быть полностью проигнорирован, поэтому следует сравнивать только компонент времени. Как я мог это сделать?
Спасибо заранее!
Ответы
Ответ 1
unsigned int flags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:flags fromDate:date1];
NSDate* timeOnly = [calendar dateFromComponents:components];
Это даст вам объект даты, где все, кроме часов/минут/секунд, было reset до некоторого общего значения. Затем вы можете использовать стандартные функции сравнения NSDate на них.
Для справки, вот обратный вопрос к вашему: Сравнение двух NSDates и игнорирование компонента времени
Ответ 2
Вы можете создать дату, представляющую начало сегодняшнего дня, и добавить время как компоненты к ней, чтобы получить граничные даты.
NSDate *now = [NSDate date];
NSDate *startOfToday;
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&startOfToday interval:NULL forDate:now];
NSDateComponents *startComps = [[NSDateComponents alloc] init];
startComps.hour = 7;
startComps.minute = 30;
NSDateComponents *endComps = [[NSDateComponents alloc] init];
endComps.hour = 20;
NSDate *startDate = [[NSCalendar currentCalendar] dateByAddingComponents:startComps toDate:startOfToday options:0];
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:endComps toDate:startOfToday options:0];
if ([startDate timeIntervalSince1970] < [now timeIntervalSince1970] && [now timeIntervalSince1970] < [endDate timeIntervalSince1970]) {
NSLog(@"good");
}
Ответ 3
NSDateFormatter* formatterDate = [[[NSDateFormatter alloc] init] autorelease];
formatterDate.dateStyle = NSDateFormatterMediumStyle; // whatever format you like
NSDate *first_Date = [formatterDate dateFromString:@""];
NSDate *second_Date = [formatterDate dateFromString:@""];
NSDate *todaysDate = [NSDate date];
NSTimeInterval timeIntFormFirstDate = [todaysDate timeIntervalSinceDate:First_Date];
NSTimeInterval timeIntFronLastDate = [second_Date timeIntervalSinceDate:todaysDate];
int interval1 = timeIntFormFirstDate/60;
int interval2 = timeIntFronLastDate/60;
if (interval1 >0 && interval2 >0)
{
NSLog(@"Today date is between first and second date");
}