2010-10-26 9 views
4

si j'ai deux nsdatecomponent et je veux savoir si le temps dans le premier objet est plus grand que le second.Comparez deux nsdatecomponent

exemple:

if (nsdatecomponentObject1 > nsdatecomponentObject2) 
{ 
    //something 
} 

Parce que cette façon ne pas fonctionne, comment je peux le faire?

+0

Qu'est-ce que cela signifie pour comparer les deux NSDateComponents du le même mois, jour et année si l'un a un jour de semaine spécifié et l'autre pas? Où ces règles sont-elles spécifiées? – titaniumdecoy

Répondre

6

Utilisez compare: sur le NSDate du NSDateComponent.

if([[nsdatecomponentObject1 date] compare:[nsdatecomponentObject2 date]] == NSOrderedAscending) 
+0

Note pour les développeurs Mac: Cette méthode n'existe que dans la version iOS de Foundation (jusqu'à présent, de toute façon - elle sera probablement dans Lion). – Chuck

+2

le résultat de ma comparaison est toujours 0, pourquoi? – alex

+0

Je pense que votre réponse ne compare que la date, parce que mon nsdateobjects possède la même date mais pas la même "seconde composante", et le résultat est nsorderedsame. – alex

0

Le droit (et seulement) façon de comparer « à la volée » deux NSDateComponents, est d'utiliser un objet NSCalendar:

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 

switch([[gregorian dateFromComponents:oneNSDateComponents] compare:[gregorian dateFromComponents:anotherNSDateComponents]]) { 
    case NSOrderedSame: 
     NSLog(@"orderSame"); 
     break; 
    case NSOrderedAscending: 
     NSLog(@"orderAscending"); 
     break; 
    case NSOrderedDescending: 
     NSLog(@"orderDescending"); 
     break; 
} 
Questions connexes