Comparer deux NSDate
Il est souvent utile de comparer deux NSDate dans le temps. Il s’agit de savoir si une date est antérieure ou postérieure à une autre. Le mécanisme offert par Apple pour les comparaisons de NSDate n’est pas des plus pratiques. Il faut utiliser la méthode compare:(NSDate*)date qui retourne un objet de type NSComparisonResult.
Cette méthode est une méthode standard de Foundation. Elle permet, grâce à des résultats de comparaison standardisés d’effectuer un tri sur des objets de façon générique. Oui, mais Apple ne prévoit pas de méthodes un peu plus haut niveau pour les simples comparaisons de dates. Voilà pourquoi j’ai écrit rapidement une addition de la classe NSDate permettant de comparer deux dates intuitivement. Les voici:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
// // NSDateAdditions.h // // Created by Julien on 28/05/09. // Copyright 2009 Julien Quéré - Webd.fr. All rights reserved. // #import <Foundation/Foundation.h> @interface NSDate (NSDateAdditions) -(BOOL) isLaterThanOrEqualTo:(NSDate*)date; -(BOOL) isEarlierThanOrEqualTo:(NSDate*)date; -(BOOL) isLaterThan:(NSDate*)date; -(BOOL) isEarlierThan:(NSDate*)date; @end // NSDateAdditions.m // // Created by Julien on 28/05/09. // Copyright 2009 Julien Quéré - Webd.fr. All rights reserved. // #import "NSDateAdditions.h" @implementation NSDate (NSDateAdditions) -(BOOL) isLaterThanOrEqualTo:(NSDate*)date { return !([self compare:date] == NSOrderedAscending); } -(BOOL) isEarlierThanOrEqualTo:(NSDate*)date { return !([self compare:date] == NSOrderedDescending); } -(BOOL) isLaterThan:(NSDate*)date { return ([self compare:date] == NSOrderedDescending); } -(BOOL) isEarlierThan:(NSDate*)date { return ([self compare:date] == NSOrderedAscending); } @end |
L’utilisation, quant à elle est on-ne-peut plus simple:
|
1 2 3 4 5 6 7 8 9 |
// Compare a NSDate (maDate) and the actual date if([maDate isEarlierThanOrEqualTo:[NSDate date]]) { NSLog(@"It's earlier or equal"); } else { NSLog(@"It's later"); } |
3 Responses to "Comparer deux NSDate"
Add Comment