2011-06-11 4 views
2

je les suivantes NSDateFormatter:NSDate ne convertit pas correctement à l'aide NSDateFormatter

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MMM. d, yyyy"]; 

NSLocale *usLocal = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[dateFormatter setLocale:usLocal]; 

et j'ai une boucle while qui commence à une date de début donné et incrémente la date par un jusqu'à ce qu'il atteigne une date de fin spécifique.

NSDate *d = start; 
while(YES){  
    NSString *td = [dateFormatter stringFromDate:d]; 
    NSLog(@"converted date %@ to %@",d,td); 
    ...adds a date and re-initializes d 
} 

Et je reçois la sortie comme la suivante:

2011-06-11 17:10:18.678 ListOf100[8784:707] converted date 2011-05-31 00:00:00 +0000 to May. 30, 2011 
2011-06-11 17:10:18.687 ListOf100[8784:707] converted date 2011-06-01 00:00:00 +0000 to May. 31, 2011 
2011-06-11 17:10:18.717 ListOf100[8784:707] converted date 2011-06-02 00:00:00 +0000 to Jun. 1, 2011 

Comme vous pouvez le voir, toutes les dates ne sont pas correctement convertissaient. Ils sont tous de 1 jour. Pourquoi cela pourrait-il se produire? Et comment puis-je le réparer?

+2

Pouvez-vous publier comment vous réinitialisez "d"? – Sai

+0

Ce n'est pas le problème. Même la première fois c'est faux. – CodeGuy

+0

Vous devriez probablement signaler ce problème à Apple. Je suis d'accord avec @Sai, vous devriez poster le code, afin que nous puissions tester si c'est reproductible. –

Répondre

3

Me semble les dates sont en cours de création . dans un fuseau horaire différent de celui de de travail de la mise en forme dans

NSDate * d = [NSDate dateWithTimeIntervalSince1970:800000];  
// Arbitrary date 

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MMM. d, yyyy"]; 

NSLocale *usLocal = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[dateFormatter setLocale:usLocal]; 


//!!!: Set time zone 
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 

NSString *td = [dateFormatter stringFromDate:d]; 
NSLog(@"converted date %@ to %@",d,td); 

Donne:

2011-06-11 22: 44: 01,642 Tim eZoneFormatter [21901: 207] date de conversion 1970-01-10 06:13:20 +0000 au 10 janvier 1970

1

Je ne sais pas pourquoi ça se passe, mais si elle est persistante, la fixation ne devrait pas être plus difficile que l'ajout d'un jour à d avant de le convertir:

NSString *td = [dateFormatter stringFromDate:[d dateByAddingTimeInterval:86400]]; 
Questions connexes