2009-12-15 2 views
1

J'ai le code suivant dans mon programme:Est-ce que - [NSCalendar ordinalityOfUnit: inUnit: forDate:] ne fonctionne pas?

NSUInteger currentMinuteOrdinal = [[NSCalendar currentCalendar] ordinalityOfUnit:NSMinuteCalendarUnit inUnit:NSEraCalendarUnit forDate:[NSDate date]]; 
NSUInteger passedInMinuteOrdinal = [[NSCalendar currentCalendar] ordinalityOfUnit:NSMinuteCalendarUnit inUnit:NSEraCalendarUnit forDate:passedInDate]; 
NSUInteger minuteDifference = currentMinuteOrdinal - passedInMinuteOrdinal; 

L'heure actuelle est aujourd'hui à 18h09. Le temps passé est aujourd'hui à 16h17. (Je regarde les valeurs dans le débogueur donc je sais que ces valeurs sont correctes.) Pourtant ces deux valeurs ordinales sortent toujours à la même valeur, rendant le 'minuteDifference' comme 0.

Est-ce que cette méthode simplement ne pas travail? Ou est-ce que je fais quelque chose d'horriblement mal?

Merci.

Répondre

2

Votre code semble fonctionner pour moi (copier/coller), je ne vois pas comment vous gérez passedInDate, I dates de configuration que vous avez spécifié:

NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"]; 

//NSDate * dateA = [NSDate date]; 
NSDate * dateA = [formatter dateFromString:@"2009-12-15 06:09:00 +1100"]; 
NSDate * dateB = [formatter dateFromString:@"2009-12-15 04:17:00 +1100"]; 

NSUInteger currentMinuteOrdinal = 
    [[NSCalendar currentCalendar] ordinalityOfUnit:NSMinuteCalendarUnit 
              inUnit:NSEraCalendarUnit 
              forDate:dateA];  // current 

NSUInteger passedInMinuteOrdinal = 
    [[NSCalendar currentCalendar] ordinalityOfUnit:NSMinuteCalendarUnit 
              inUnit:NSEraCalendarUnit 
              forDate:dateB];  // passed in 

NSUInteger minuteDifference = currentMinuteOrdinal - passedInMinuteOrdinal; 

NSLog(@" currentMinuteOrdinal: %d", currentMinuteOrdinal); 
NSLog(@"passedInMinuteOrdinal: %d", passedInMinuteOrdinal); 
NSLog(@"  minuteDifference: %d", minuteDifference); 

sortie dans ce cas:

2009-12-15 21:51:46.215 x[50036:903] currentMinuteOrdinal: 1056606130 
2009-12-15 21:51:46.216 x[50036:903] passedInMinuteOrdinal: 1056606018 
2009-12-15 21:51:46.217 x[50036:903]  minuteDifference: 112