Я пытаюсь добиться синхронизации DropBox и мне нужно сравнить даты двух файлов. Один на моем аккаунте dropBox, а другой на моем iPhone.
Я придумал следующее, но получаю неожиданные результаты. Я думаю, что я делаю что-то в корне неправильно, сравнивая две даты. Я просто использовал операторы> <, но, думаю, это не очень хорошо, так как я сравниваю две строки NSDate. Вот так:
NSLog(@"dB...lastModified: %@", dbObject.lastModifiedDate);
NSLog(@"iP...lastModified: %@", [self getDateOfLocalFile:@"NoteBook.txt"]);
if ([dbObject lastModifiedDate] < [self getDateOfLocalFile:@"NoteBook.txt"]) {
NSLog(@"...db is more up-to-date. Download in progress...");
[self DBdownload:@"NoteBook.txt"];
NSLog(@"Download complete.");
} else {
NSLog(@"...iP is more up-to-date. Upload in progress...");
[self DBupload:@"NoteBook.txt"];
NSLog(@"Upload complete.");
}
Это дало мне следующий (случайный и неправильный) вывод:
2011-05-11 14:20:54.413 NotePage[6918:207] dB...lastModified: 2011-05-11 13:18:25 +0000
2011-05-11 14:20:54.414 NotePage[6918:207] iP...lastModified: 2011-05-11 13:20:48 +0000
2011-05-11 14:20:54.415 NotePage[6918:207] ...db is more up-to-date.
или этот, который оказывается правильным:
2011-05-11 14:20:25.097 NotePage[6903:207] dB...lastModified: 2011-05-11 13:18:25 +0000
2011-05-11 14:20:25.098 NotePage[6903:207] iP...lastModified: 2011-05-11 13:19:45 +0000
2011-05-11 14:20:25.099 NotePage[6903:207] ...iP is more up-to-date.
iphone
objective-c
cocoa-touch
nsdate
неважно
источник
источник
Ответы:
Давайте предположим две даты:
Тогда следующее сравнение покажет, что раньше / позже / то же самое:
Пожалуйста, обратитесь к документации класса NSDate для более подробной информации.
источник
date1 -> date2
восходящем / нисходящем (и, следовательно, date1 - позже или раньше соответственно).Позднее, но другой простой способ сравнения объектов NSDate - преобразовать их в примитивные типы, что позволяет легко использовать '>' '<' '==' и т. Д.
например.
timeIntervalSinceReferenceDate
преобразует дату в секунды после отчетной даты (1 января 2001 года, время по Гринвичу). Так какtimeIntervalSinceReferenceDate
возвращает NSTimeInterval (который является двойной typedef), мы можем использовать примитивные компараторы.источник
(NSComparisonResult)compare:(NSDate *)
но все же довольно многословно для этой простой операции ... (как обычно)[dateA timeIntervalSinceDate:dateB] > 0
В Swift вы можете перегрузить существующих операторов:
Затем вы можете сравнить NSDates непосредственно
<
,>
и==
(уже поддерживается).источник
{ ... }
NSDate
имеет функцию сравнения.compare:
ВозвращаетNSComparisonResult
значение, которое указывает временное упорядочение получателя и другую заданную дату.Параметры :
anotherDate
дата, с которой сравнивается получатель. Это значение не должно быть равно нулю. Если значение равно nil, поведение не определено и может измениться в будущих версиях Mac OS X.Возвращаемое значение:
NSOrderedSame
NSOrderedDescending
NSOrderedAscending
.источник
Вы хотите использовать методы сравнения NSDate :, LaterDate :, earlyDate: или isEqualToDate:. Использование операторов <и> в этой ситуации сравнивает указатели, а не даты
источник
Это возвращает более раннюю версию получателя и anotherDate. Если оба одинаковы, получатель возвращается.
источник
cDate = [aDate earlierDate:bDate]
тогдаcDate == aDate
и то иcDate == bDate
другое может быть правдой. Я нашел это, работая над iOS 8-earlierDate:
(и-laterDate:
) не может вернуть ни получателя, ни аргумента.Некоторые утилиты даты, в том числе сравнения на английском языке, что приятно:
Реализация:
источник
Вы должны использовать:
сравнивать даты. В задаче С. перегрузка операторов отсутствует.
источник
Почему бы вам не использовать эти
NSDate
методы сравнения:источник
Я сталкиваюсь с почти такой же ситуацией, но в моем случае я проверяю разницу в количестве дней
Полезно, когда вам нужно сравнить NSDate в единицах Дни / Месяц / Год
источник
Вы можете сравнить две даты этим методом также
источник
Я попробовал это надеюсь, что это работает для вас
источник
Используйте эту простую функцию для сравнения дат
источник