iOS NSDateFormatter devuelve la date incorrecta de la cadena

Estoy usando el mismo NSDateFormatter sin modificar para codificar y decodificar dates de cadenas. La encoding de la date en la secuencia funciona bien, pero recuperarla es extrañamente no funciona bien. Ni siquiera es una cuestión de zonas horarias, ya que la mayoría de las dates tienen varios meses libres. Yo tengo:

 NSDateFormatter *_calibrationDateFormat = [[NSDateFormatter alloc] init]; [_calibrationDateFormat setDateFormat:@"EEEE MMM d, YYYY"]; NSString *text = @"Thursday Dec 6, 2018"; NSLog(@"%@\n%@", text, [_calibrationDateFormat dateFromString:text]); 

La salida:

 Monday Aug 12, 2013 2012-12-31 05:00:00 +0000 

Unos cuantos más bashs con otras dates:

 Friday Apr 12, 2013 2013-01-04 05:00:00 +0000 Saturday Oct 26, 2013 2013-01-05 05:00:00 +0000 Thursday Sep 10, 2015 2015-01-01 05:00:00 +0000 Thursday Jan 5, 2017 2017-01-05 05:00:00 +0000 

Estoy realmente en una pérdida en cuanto a la lógica por la cual decodifica esas dates. También probé diferentes formattings, como eliminar el día de la semana o usar el nombre completo del mes en lugar de la abreviatura de 3 letras, pero los resultados son igualmente confusos. Tenga en count que para mis testings estaba usando un UIDatePicker y codificando la date resultante con el mismo formateador de date, para evitar cualquier error humano al formatear la date. ¿Hay alguna forma confiable de get el object de date de una cadena de date humana legible como esa?

Creo que el problema es que estás usando YYYY vez de yyyy . La variante en mayúscula es para calendars basados ​​en "la semana del año" (ver la especificación UTS para más), que en realidad no es lo mismo que get el año calendar literal en muchas (¡mayoría?) Situaciones. Usando @"EEEE MMM d, yyyy" como formateador de date puede arreglar esto para usted.