J’ai un que je dois comparer avec deux autres
et j’ai essayer avec et
, mais si ma date est identique aux autres deux dates ?
Exemple : si j’ai un et deux autres qui sont un =
et deux `` ce que je peux utiliser ?
J’ai un que je dois comparer avec deux autres
et j’ai essayer avec et
, mais si ma date est identique aux autres deux dates ?
Exemple : si j’ai un et deux autres qui sont un =
et deux `` ce que je peux utiliser ?
Selon la documentation d'Apple d' NSDate compare:
Retourne un NSComparisonResult valeur qui indique l'ordre temporel du récepteur et l'autre date donnée.
- (NSComparisonResult)compare:(NSDate *)anotherDate
Les paramètres
anotherDate
La date à laquelle comparer la le récepteur. Cette valeur ne doit pas être nul. Si la valeur est nulle, le comportement est pas défini et peut changer à l'avenir les versions de Mac OS X.
Valeur De Retour
Si:
Le récepteur et anotherDate sont exactement égale les unes des autres,
NSOrderedSame
Le récepteur est plus tard dans le temps que anotherDate,
NSOrderedDescending
Le récepteur est plus tôt dans le temps que anotherDate,
NSOrderedAscending
En d'autres termes:
if ([date1 compare:date2] == NSOrderedSame) ...
Notez qu'il peut être plus facile dans votre cas particulier, à lire et à écrire ceci :
if ([date2 isEqualToDate:date2]) ...
Je ne sais pas exactement si vous avez posé cette question, mais si vous souhaitez uniquement comparer le composant de date d'un NSDate, vous devez utiliser NSCalendar et NSDateComponents pour supprimer le composant d'heure.
Quelque chose comme ça devrait fonctionner comme une catégorie pour NSDate:
- (NSComparisonResult)compareDateOnly:(NSDate *)otherDate {
NSUInteger dateFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit;
NSCalendar *gregorianCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *selfComponents = [gregorianCalendar components:dateFlags fromDate:self];
NSDate *selfDateOnly = [gregorianCalendar dateFromComponents:selfComponents];
NSDateComponents *otherCompents = [gregorianCalendar components:dateFlags fromDate:otherDate];
NSDate *otherDateOnly = [gregorianCalendar dateFromComponents:otherCompents];
return [selfDateOnly compare:otherDateOnly];
}
NSDate
représente en fait un intervalle de temps en secondes depuis une date de référence (1er janvier 2000, je pense). En interne, un nombre à virgule flottante en double précision est utilisé. Il est donc très peu probable que deux dates arbitraires se comparent, même si elles se déroulent le même jour. Si vous voulez voir si une date particulière tombe un jour particulier, vous devrez probablement utiliser NSDateComponents
. par exemple
NSDateComponents* dateComponents = [[NSDateComponents alloc] init];
[dateComponents setYear: 2011];
[dateComponents setMonth: 5];
[dateComponents setDay: 24];
/*
* Construct two dates that bracket the day you are checking.
* Use the user's current calendar. I think this takes care of things like daylight saving time.
*/
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDate* startOfDate = [calendar dateFromComponents: dateComponents];
NSDateComponents* oneDay = [[NSDateComponents alloc] init];
[oneDay setDay: 1];
NSDate* endOfDate = [calendar dateByAddingComponents: oneDay toDate: startOfDate options: 0];
/*
* Compare the date with the start of the day and the end of the day.
*/
NSComparisonResult startCompare = [startOfDate compare: myDate];
NSComparisonResult endCompare = [endOfDate compare: myDate];
if (startCompare != NSOrderedDescending && endCompare == NSOrderedDescending)
{
// we are on the right date
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.