Сравнение объектов NSDate - PullRequest
       16

Сравнение объектов NSDate

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

У меня есть приложение, которое использует CoreData.Одна из сущностей содержит атрибут date, который, ну ... дата.Я пишу тест для проверки того, что метка времени, переданная методу класса для класса этой сущности, конвертируется в правильный NSDate.

Вот мой тестовый код:

NSDate *now = [NSDate date];
NSTimeInterval ts = [now timeIntervalSince1970];
// paramDict is a dictionary with attributes and values
[paramDict setValue:[NSNumber numberWithDouble:ts] forKey:@"date"];

MyEntity *myEntity = [MyEntity entityWithAttributes:paramDict inContext:testMOContext];

STAssertTrue([now isEqualToDate:[myEntity date]], @"dates were not equal");

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

update

Отметка времени преобразуется в дату следующим способом:

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[[paramDict valueForKey:@"date"] doubleValue]];
[newObject setDate:date];

Ответы [ 2 ]

3 голосов
/ 17 ноября 2011

Вы можете вычислить разницу между вашей сейчас датой и датой myEntity , используя

NSTimeInterval difference = fabs([[myEntity date] timeIntervalSinceDate:now]);

и сравните результат с пороговым значением (например, 1 секунда). Если разница меньше 1 секунды, считайте обе даты одинаковыми.

Из документации NSDate ( isEqualToDate ):

Этот метод обнаруживает разницу в секундах между датами. Если вы хотите сравнить даты с менее точной гранулярностью, используйте timeIntervalSinceDate: для сравнения двух дат.

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

isEqualToDate сравнивает NSDate объекты, но ваш атрибут date кажется временным интервалом?Я предлагаю использовать тип даты для атрибута и придерживаться NSDate.

...