Хранение значений времени и сравнение их - PullRequest
0 голосов
/ 28 ноября 2011

Я пытаюсь определить точки во времени, а затем сравнить их. Я выяснил, как их сравнивать, но я пытаюсь создать NSDate объекты для представления времени суток, и это вызывает некоторые проблемы. Я использовал NSDateFromComponents и использовал функции setHour: и setMinute:, но он не смог изменить объект. Также необходимо автоматически установить другие компоненты даты на текущее время и дату.

СРАВНЕНИЕ ОБЪЕКТОВ:

static bool DateIsBetween(NSDate *beginDate, NSDate *date, NSDate *endDate) {
    return [date timeIntervalSince1970] > [beginDate timeIntervalSince1970] && [date    timeIntervalSince1970] < [endDate timeIntervalSince1970];
}

ОБЪЕКТЫ СОЗДАНИЯ ДАТЫ:

NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"EST"]];
NSDateComponents *weekdayComponents = [calendar components:NSWeekdayCalendarUnit fromDate:todayDate];

NSDateComponents *genericTimeComponents = [[NSDateComponents alloc]init];

[genericTimeComponents setHour:5];
[genericTimeComponents setMinute:0];
[genericTimeComponents setDay:weekdayComponents.day];
[genericTimeComponents setYear:weekdayComponents.year];
[genericTimeComponents setMonth:weekdayComponents.month];


NSDateComponents *secondComps = [[NSDateComponents alloc]init];
[secondComps setHour:7];
[secondComps setMinute:0];
[secondComps setDay:weekdayComponents.day];
[secondComps setYear:weekdayComponents.year];
[secondComps setEra:weekdayComponents.era];
[secondComps setMonth:weekdayComponents.month];

1 Ответ

0 голосов
/ 28 ноября 2011

Обязательно используйте скобки в функции сравнения дат (только для ясности; логически, она должна работать просто отлично):

 static bool DateIsBetween(NSDate *beginDate, NSDate *date, NSDate *endDate) {
    return (([date timeIntervalSince1970] > [beginDate timeIntervalSince1970]) && ([date    timeIntervalSince1970] < [endDate timeIntervalSince1970]));
}

Для таких случаев хорошей идеей будет создатьКатегория для класса NSDate и написать методjective-c.

В остальном я попробовал следующий код, и он работал для меня:

NSDate * now = [NSDate date];

NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];

[gregorian setTimeZone:[NSTimeZone localTimeZone]];

NSDateComponents *genericTimeComponents = [gregorian components:(NSWeekdayCalendarUnit |NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit |NSYearCalendarUnit|NSMonthCalendarUnit|NSEraCalendarUnit)
                                                      fromDate:now];

[genericTimeComponents setHour:5];
[genericTimeComponents setMinute:0];

//  Quick Check 
NSLog(@"GTC=%@", genericTimeComponents);
...