NSDate dateFromSsortingng 2 mois de mal?

J'ai le code suivant:

NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init]; [dateFormater setDateFormat:@"yyyy-MM-DD HH:mm:ss"]; [dateFormater setLocale:[NSLocale currentLocale]]; [dateFormater setTimeZone:[NSTimeZone systemTimeZone]]; NSDate *localDate = [dateFormater dateFromSsortingng:localUpdate]; NSDate *serverDate = [dateFormater dateFromSsortingng:serverUpdate]; 

Les strings d'input pour localUpdate et serverUpdate sont:

 2014-01-31 23:42:17 2014-02-01 00:09:37 

Lors de la conversion de ceux de NSSsortingng à NSDate, le second est à 2 mois de retard?

 2014-01-31 22:42:17 +0000 2013-12-31 23:09:37 +0000 

Quelqu'un peut-il expliquer cela?

xCodelog

vérifiez cette ligne:

 [dateFormater setDateFormat:@"yyyy-MM-DD HH:mm:ss"]; 

le format de date correct est @ "aaaa-MM-jj HH: mm: ss" avec "dd" pas "DD"

J'ai eu le même problème une fois … et si le format de la date est incorrect, quand vous utilisez la dateFormatter, il faudra soustraire ou append un mois à la date.

Votre string de format de date "yyyy-MM-DD HH:mm:ss" n'est pas tout à fait correcte.

Vous dites à NSDateFormatter d'parsingr le 01 dans votre deuxième exemple comme le jour de l'année ( DD ) au lieu du jour du mois ( dd ), que vous voulez à la place.

 yyyy-MM-DD HH:mm:ss 2014-02-01 00:09:37 ^^~~~~~~~~~~~ these digits are being parsed as day of year rather than as day of month 

C'est une erreur facile, et une erreur qui est cachée par votre premier exemple, dans laquelle le jour du mois et le jour de l'année sont les mêmes.

Voir la reference Unicode pour les formats de date utilisés par iOS 6 et plus. (Pour les versions plus anciennes, choisissez le bon lien dans la documentation d'Apple .)

NSDateFormatter académique: pourquoi NSDateFormatter interprète la deuxième date comme étant le dernier jour de 2013 (plutôt que le 1er jour de 2014, comme spécifié) est probablement un bug causé en spécifiant un mois et un jour de l'année (qui sont mutuellement exclusifs), un bug dans l'parsingur (interprétant le -01 ème jour de l'année), ou un timezone ou un détail de l'heure d'été (si les règles ont changé à minuit dans le timezone local).