J'essaie d'utiliser [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:date]
à deux dates différentes pour voir si elles tombent le même jour. Cependant, si mon fuseau horaire est différent (disons, quelque part en Allemagne), même si les dates sont évidemment les mêmes, les jours retournés sont différents. Si j'utilise NSYearCalendarUnit
au lieu de NSEraCalendarUnit
aux mêmes dates, les valeurs renvoyées sont les mêmes.NSCalendar obtenir la différence de jour faux
Le seul problème avec l'utilisation NSYearCalendarUnit
est qu'il renvoie la même valeur pour le même jour d'années différentes, et il n'est pas simple de déterminer le nombre de jours entre deux dates si elles tombent sur des années différentes.
Des idées sur ce qui ne va pas ou comment déterminer plus facilement si deux dates sont le même jour, ou pour déterminer le nombre de jours entre elles?
Exemple:
[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Berlin"]];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date1 = [NSDate dateWithTimeIntervalSinceReferenceDate:300751200];
NSDate *date2 = [NSDate dateWithTimeIntervalSinceReferenceDate:300836062.388569];
NSLog(@"\nDate 1: %@\nDate 2: %@",date1,date2);
/*Output:
Date 1: 2010-07-14 00:00:00 +0200
Date 2: 2010-07-14 23:34:22 +0200
*/
int day1 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit
forDate:date1];
int day2 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit
forDate:date2];
NSLog(@"\nDay 1: %i\nDay 2: %i",day1,day2);
/*Output:
Day 1: 733966
Day 2: 733967
*/
day1 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit
forDate:date1];
day2 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit
forDate:date2];
NSLog(@"\nDay 1:%i\nDay 2: %i",day1,day2);
/*Output:
Day 1: 195
Day 2: 195
*/
J'ai le même problème. Il semble que l'ère commence à temps fixe, disons 00:00:01 1. Janvier de l'année 1 GMT. NSYearCalendarUnit semble commencer le 1er janvier 00:00:01 mais dans le fuseau horaire NSCalendar, qui peut ne pas être GMT. Cela pourrait expliquer, pourquoi les résultats de l'ère/année diffèrent. Je vais remplir un rapport de bug. Cela rend inutile la méthode de l'ordinalité pour la différence de jour si les jours ne sont pas dans la même année. –