J'essaie de réaliser une synchronisation dropBox et j'ai besoin de comparer les dates de deux fichiers. L'un est sur mon compte dropBox et l'autre sur mon iPhone.
J'ai trouvé ce qui suit, mais j'obtiens des résultats inattendus. Je suppose que je fais quelque chose de fondamentalement mauvais en comparant les deux dates. J'ai simplement utilisé les opérateurs> <, mais je suppose que ce n'est pas bon car je compare deux chaînes NSDate. Et c'est parti:
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.");
}
Cela m'a donné la sortie (aléatoire et erronée) suivante:
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.
ou celui-ci qui se trouve être correct:
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
ça ne fait rien
la source
la source
Réponses:
Supposons deux dates:
Ensuite, la comparaison suivante indiquera ce qui est le plus tôt / le plus tard / le même:
Veuillez vous référer à la documentation de la classe NSDate pour plus de détails.
la source
date1 -> date2
croissant / décroissant (et donc date1 est plus tard ou plus tôt respectivement).Tard dans la soirée, mais un autre moyen simple de comparer les objets NSDate est de les convertir en types primitifs, ce qui permet une utilisation facile de '>' '<' '==' etc.
par exemple.
timeIntervalSinceReferenceDate
convertit la date en secondes depuis la date de référence (1er janvier 2001, GMT). CommetimeIntervalSinceReferenceDate
renvoie un NSTimeInterval (qui est un double typedef), nous pouvons utiliser des comparateurs primitifs.la source
(NSComparisonResult)compare:(NSDate *)
mais encore assez bavard pour cette opération simple ... (comme d'habitude)[dateA timeIntervalSinceDate:dateB] > 0
Dans Swift, vous pouvez surcharger les opérateurs existants:
Ensuite, vous pouvez comparer NSDates directement avec
<
,>
et==
(déjà pris en charge).la source
{ ... }
NSDate
a une fonction de comparaison.compare:
Renvoie uneNSComparisonResult
valeur qui indique l'ordre temporel du récepteur et une autre date donnée.Paramètres :
anotherDate
date à laquelle comparer le récepteur. Cette valeur ne doit pas être nulle. Si la valeur est nulle, le comportement n'est pas défini et peut changer dans les futures versions de Mac OS X.Valeur de retour:
NSOrderedSame
NSOrderedDescending
NSOrderedAscending
.la source
Vous souhaitez utiliser les méthodes NSDate compare :, laterDate :, earlyDate :, ou isEqualToDate :. Utiliser les opérateurs <et> dans cette situation, c'est comparer les pointeurs, pas les dates
la source
Cela renvoie la première du récepteur et une autreDate. Si les deux sont identiques, le récepteur est retourné.
la source
cDate = [aDate earlierDate:bDate]
alorscDate == aDate
etcDate == bDate
peut être vrai à la fois. J'ai trouvé cela en train de travailler sur iOS 8.-earlierDate:
(et-laterDate:
) ne peuvent renvoyer ni le récepteur ni l'argument.Certains utilitaires de date, y compris les comparaisons EN ANGLAIS, ce qui est bien:
La mise en oeuvre:
la source
Tu devrais utiliser :
pour comparer les dates. Il n'y a pas de surcharge d'opérateur dans l'objectif C.
la source
Pourquoi n'utilisez-vous pas ces
NSDate
méthodes de comparaison:la source
J'ai rencontré presque la même situation, mais dans mon cas, je vérifie si la différence de nombre de jours
Utile lorsque vous devez comparer NSDate en jours / mois / année
la source
Vous pouvez également comparer deux dates par cette méthode
la source
Je l'ai essayé j'espère que ça marche pour vous
la source
Utilisez cette fonction simple pour comparer les dates
la source