этот метод проверки даты цели-c хорошо?код прилагается (получение разных результатов) - PullRequest
1 голос
/ 01 ноября 2011

Я озадачен, так как я не метод, описанный ниже, по-видимому, НЕ работает, когда я смотрю на мое приложение, когда обе даты совпадают. Год / месяц / дата / час / минута / секпроверить это, кажется, работает нормально.Является ли приведенный ниже код не надежным по какой-то причине?

Код:

- (BOOL)isAfterThisDate:(NSDate*)thisDate {
    NSComparisonResult result = [self compare:thisDate];
    if (result == NSOrderedDescending) {
        NSLog(@"        - isAfterThisDate: %@ is after %@ is TRUE", [self stringSummary], [thisDate stringSummary]);
        return TRUE;
    } else {
        NSLog(@"        - isAfterThisDate: %@ is after %@ is FALSE", [self stringSummary], [thisDate stringSummary]);
        return FALSE;
    }
}

Вот выдержка из журнала приложения (т. Е. Когда я использую этот метод в своем приложении).Я ожидал, что это будет ложно, как моя поддержка тестового модуля.

isAfterThisDate: Thu 03-11-2011 09:00:00 GMT+10:00 is after Thu 03-11-2011 09:00:00 GMT+10:00 is TRUE

Для справки я использовал вспомогательный метод:

- (NSString*) stringSummary {
    NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
    [formatter setDateFormat:@"EEE dd-MM-yyyy HH:mm:ss zzz"];
    NSString* str = [formatter stringFromDate:self];
    return str;
}

Ответы [ 2 ]

1 голос
/ 05 ноября 2011

Обычно лучше использовать

  • API верхнего уровня, которые доступны И
  • самый специфический доступный API.

Так что в этом случае -earlierDate: или -laterDate:, если вы просто собираетесь использовать сам объект результирующей даты, или если вы просто тестируете определенную дату, тогда да, -timeIntervalSinceLastDate.

Вообще говоря, средства форматирования предназначены только для создания понятных человеку форм значения, а не для выполнения операций над самими значениями.

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

Да

(для справки - как указал Кевин - я не оценил подсекунды, которые присутствовали в моих датах)

...