Проблема с двумя NSDate - PullRequest
2 голосов
/ 10 июня 2011

У меня проблема с этим кодом:

NSDate *today = [[NSDate alloc] init];
if (dateOne == today) {
dataLabel.textColor = [UIColor redColor]; NSLog(@"inside if");}
NSLog(@"today:%@", oggi);
NSLog(@"dateOne:%@", dateOne);

Результат консоли

2011-06-10 17:19:00.170 Project[678:707] today:2011-06-10 15:19:00 +0000
2011-06-10 17:19:00.174 Project[678:707] dateOne:2011-06-10 15:19:00 +0000

Я также пробую "isEqualToDate", но код не вводится внутри "if"

Ответы [ 2 ]

9 голосов
/ 10 июня 2011

Я понимаю, что вы пытаетесь определить, является ли данный NSDate сегодняшним днем.Для этого вам не нужно принимать во внимание часы, минуты и т. Д. При сравнении.Как насчет этого:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:[NSDate date]];
NSDate *today = [calendar dateFromComponents:components];
components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:otherDate];
NSDate *dateOne = [calendar dateFromComponents:components];

if([today isEqualToDate:dateOne]) {
    ...
}

Метод isEqualToDate: не будет выполнять это задание, потому что оно проверяет, точно ли данная дата точно равна получателю (с точностью до секунды).

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

0 голосов
/ 10 июня 2011

== сравнивает указатели, чтобы увидеть, указывают ли они на один и тот же объект, а не на значения самого объекта.Чтобы сравнить даты, используйте -[NSDate isEqualToDate:]:

if ([dateOne isEqualToDate:today]) {
    dataLabel.textColor = [UIColor redColor];
    NSLog(@"inside if");
}
...