2012-09-14 15 views
31

im usando xcode 4.5 (4G182) con iOS 6. NSDateFormatter muestra el año incorrecto en iOS 6, ¿cómo resolverlo?NSDateFormatter muestra el año incorrecto

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"YYYY-MM-dd"]; 
NSString *str = [dateFormatter stringFromDate:[NSDate date]]; 
NSLog(@"%@ == %@",str,[[dateFormatter dateFromString:str] description]); 

que imprima " -09-14 == 2011 16:00:00 +0000 -09-13"

+0

No creo que esto sea un "problema de iOS 6". Deberías usar 'y' minúsculas. Consulte http://stackoverflow.com/questions/6388370/string-formatted-date-picker-date-is-off/6388430#6388430. – Anna

Respuesta

97

YYYY no es lo mismo que yyyy.

Según this page que el IOS Date format page referencias;

`y`: Year 
`Y`: Year (in "Week of Year" based calendars). This year designation is used in 
    ISO year-week calendar as defined by ISO 8601, but can be used in 
    non-Gregorian based calendar systems where week date processing is desired. 
    May not always be the same value as calendar year. 

La frase operativa es la última. Use yyyy en su lugar.


más detalles sobre cómo y por qué los valores de año pueden desviarse cuando se utiliza YYYY:

El año ISO semana numeración comienza en el primer día (lunes) de la semana 01 y termina en el Domingo antes del nuevo año ISO (por lo tanto, sin superposición 0 brecha ). Se compone de 52 o 53 semanas completas. El número de año de numeración de semana ISO se desvía del número del año calendario gregoriano tradicional un viernes, sábado y domingo, o un sábado y domingo, o simplemente un domingo, al inicio del año calendario gregoriano tradicional (que se encuentran al final del año de numeración de la semana ISO ) y un lunes, martes y miércoles, o un lunes y martes, o solo un lunes, al final del año calendario Gregorian (que están en semana 01 de la siguiente semana ISO-numeración año). Para los jueves, el número del año de numeración de la semana ISO siempre es igual al número del año calendario gregoriano tradicional.

Ejemplos:

lunes 29 diciembre 2008 está escrito " -W01-1"

Domingo 3 de enero de 2010 se escribe " -W53-7"

De https://en.wikipedia.org/wiki/ISO_8601#Week_dates (bold stylin g agregado)

+0

Gracias ... tú también resuelves mi problema ... :) – Mani

+2

Gracias, he estado loco con este problema durante mucho tiempo ... Muchas gracias –

+2

Creo que hay un elemento de desconsideración al diseñar un formateador que utiliza YYYY para formatear un año que "puede no ser siempre el mismo valor que el año calendario". ¿No sería 'QQQQ' o 'XXXX' (por ejemplo) una opción menos propensa a errores? El "valor mnemónico" realmente no parece prioritario aquí. – Spike0xff

Cuestiones relacionadas