Ich versuche eine DropBox-Synchronisierung zu erreichen und muss die Daten zweier Dateien vergleichen. Eine befindet sich auf meinem DropBox-Konto und eine auf meinem iPhone.
Ich habe mir Folgendes ausgedacht, aber ich erhalte unerwartete Ergebnisse. Ich denke, ich mache etwas grundlegend Falsches, wenn ich die beiden Daten vergleiche. Ich habe einfach die Operatoren> <verwendet, aber ich denke, das ist nicht gut, da ich zwei NSDate-Zeichenfolgen vergleiche. Auf geht's:
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.");
}
Dies gab mir die folgende (zufällige & falsche) Ausgabe:
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.
oder dieser, der zufällig richtig ist:
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
keine Ursache
quelle
quelle
Antworten:
Nehmen wir zwei Daten an:
Der folgende Vergleich zeigt dann, was früher / später / gleich ist:
Weitere Informationen finden Sie in der Dokumentation zur NSDate-Klasse .
quelle
date1 -> date2
aufsteigend / absteigend betrachten (und daher ist Datum1 später bzw. früher).Spät zur Party, aber eine andere einfache Möglichkeit, NSDate-Objekte zu vergleichen, besteht darin, sie in primitive Typen umzuwandeln, was die einfache Verwendung von '>' '<' '==' usw. Ermöglicht
z.B.
timeIntervalSinceReferenceDate
konvertiert das Datum in Sekunden seit dem Referenzdatum (1. Januar 2001, GMT). DatimeIntervalSinceReferenceDate
ein NSTimeInterval (ein doppeltes typedef) zurückgegeben wird, können wir primitive Komparatoren verwenden.quelle
(NSComparisonResult)compare:(NSDate *)
aber dennoch ziemlich ausführlich für diese einfache Operation ... (wie üblich)[dateA timeIntervalSinceDate:dateB] > 0
In Swift können Sie vorhandene Operatoren überladen:
Dann können Sie NSDates direkt mit vergleichen
<
,>
und==
(bereits unterstützt).quelle
{ ... }
NSDate
hat eine Vergleichsfunktion.compare:
Gibt einenNSComparisonResult
Wert zurück, der die zeitliche Reihenfolge des Empfängers und ein anderes angegebenes Datum angibt.Parameter :
anotherDate
Das Datum, mit dem der Empfänger verglichen werden soll. Dieser Wert darf nicht Null sein. Wenn der Wert Null ist, ist das Verhalten undefiniert und kann sich in zukünftigen Versionen von Mac OS X ändern.Rückgabewert:
NSOrderedSame
NSOrderedDescending
NSOrderedAscending
.quelle
Sie möchten die Methoden NSDate compare:, laterDate:, previousDate: oder isEqualToDate: verwenden. Wenn Sie in dieser Situation die Operatoren <und> verwenden, werden die Zeiger und nicht die Daten verglichen
quelle
Dies gibt das frühere des Empfängers und ein anderes Datum zurück. Wenn beide gleich sind, wird der Empfänger zurückgegeben.
quelle
cDate = [aDate earlierDate:bDate]
danncDate == aDate
undcDate == bDate
kann beides wahr sein. Fand dies bei einigen Datumsarbeiten auf iOS 8.-earlierDate:
(und-laterDate:
) auf 32-Bit-Plattformen, wenn die Daten nicht identisch sind, weder den Empfänger noch das Argument zurückgeben.Einige Datums-Dienstprogramme, einschließlich Vergleiche auf Englisch, was sehr schön ist:
Die Umsetzung:
quelle
Du solltest benutzen :
Daten vergleichen. In Ziel C gibt es keine Überlastung des Bedieners.
quelle
Warum benutzt ihr nicht diese
NSDate
Vergleichsmethoden:quelle
Ich habe fast die gleiche Situation erlebt, aber in meinem Fall überprüfe ich, ob sich die Anzahl der Tage unterscheidet
Nützlich, wenn Sie NSDate in der Einheit Tage / Monat / Jahr vergleichen müssen
quelle
Mit dieser Methode können Sie auch zwei Daten vergleichen
quelle
Ich habe es versucht, hoffe es funktioniert für Sie
quelle
Verwenden Sie diese einfache Funktion zum Datumsvergleich
quelle