Comment comparer deux NSDates: Qui est la plus récente?
Je suis en train de réaliser un dropBox sync et de la nécessité de comparer les dates des deux fichiers. L'un est sur mon compte dropBox et est sur mon iPhone.
Je suis venu avec la suite, mais j'obtiens des résultats inattendus. Je suppose que je suis en train de faire quelque chose de fondamentalement mauvais lorsque l'on compare les deux dates. J'ai simplement utilisé le > < les opérateurs, mais je suppose que ce n'est pas bon comme je suis de la comparaison de deux NSDate cordes. Nous y voilà:
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 suivante (random & faux) sortie:
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 ce qui arrive à ê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.
Vous devez vous connecter pour publier un commentaire.
Supposons deux dates:
Puis la comparaison suivante sera de dire qui est plus tôt/tard/même:
Veuillez vous référer à la NSDate de documentation de classe pour plus de détails.
date1 -> date2
est l'ordre croissant/décroissant (et donc date1 est postérieure ou antérieure, respectivement).NSOrderedDescending
le résultat sera VRAI, alors que si je compare aujourd'hui les dates de l''2017-03-27 00:00:01 +0000' avec '2017-03-27 10:07:29 +0000' le résultat sera FAUX. Ne pas dire la réponse est fausse, mais pour quelqu'un qui veut comparer simplement les dates, cela ne devrait pas être utilisé.La fin de la partie, mais un autre moyen facile de comparer NSDate objets est de les convertir dans le type primitif qui permet l'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 une NSTimeInterval (qui est un double typedef), nous pouvons utiliser les primitives de comparaison.(NSComparisonResult)compare:(NSDate *)
mais toujours assez détaillées pour cette simple opération... (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).{ ... }
NSDate
a une fonction de comparaison.compare:
Retourne unNSComparisonResult
valeur qui indique l'ordre temporel du récepteur et l'autre date donnée.Paramètres:
anotherDate
La date à laquelle comparer le récepteur.
Cette valeur ne doit pas être nul. Si la valeur est nulle, le comportement est indéfini, et peut changer dans les futures versions de Mac OS X.
Valeur De Retour:
NSOrderedSame
NSOrderedDescending
NSOrderedAscending
.Vous souhaitez utiliser le NSDate comparer:, laterDate:, earlierDate: ou isEqualToDate: méthodes. En utilisant le < et > les opérateurs dans cette situation est de comparer les pointeurs, pas les dates
Renvoie le plus tôt du récepteur et anotherDate. Si les deux sont les mêmes, le récepteur est retourné.
cDate = [aDate earlierDate:bDate]
puiscDate == aDate
etcDate == bDate
peut à la fois être vrai. Trouvé ce faire certains travaux sur iOS 8.-earlierDate:
(et-laterDate:
) peut retourner ni le récepteur, ni l'argument.Certains datent de services publics, y compris des comparaisons EN ANGLAIS, ce qui est agréable:
La mise en œuvre:
Vous devez utiliser :
de comparer des dates. Il n'y a pas de surcharge d'opérateur en objective C.
Pourquoi ne pas vous les gars utiliser ces
NSDate
comparer les méthodes:J'ai rencontre presque la même situation, mais dans mon cas, je suis de vérifier si le nombre de jours de différence
Utile lorsque vous avez besoin de comparer NSDate dans les Jours/Mois/Année unité
Vous pouvez comparer les deux de la date, par cette méthode, également
Je l'ai essayé, j'espère que ça fonctionne pour vous
Utiliser cette fonction pour la date de comparaison