example ios objective-c nsdate nsdateformatter

ios - example - Diferencia entre ''YYYY'' y ''aaaa'' en NSDateFormatter



swift 4 dateformatter example (4)

Cuál es la diferencia exacta entre ''YYYY'' y ''aaaa''. Leí en este enlace , dice que

Un error común es usar YYYY. yyyy especifica el año calendario, mientras que YYYY especifica el año (de "Semana del año"), que se utiliza en el calendario anual de ISO. En la mayoría de los casos, aaaa y YYYY producen el mismo número, sin embargo, pueden ser diferentes. Por lo general, debe usar el año calendario.

Pero cuando trato de usar

NSString *stringDate = @"Feb 28, 2013 05:30pm"; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"MMM dd, yyyy hh:mma"]; NSDate *date=[dateFormatter dateFromString:stringDate]; NSLog(@"Date 1 : %@",date); //2013-02-28 12:00:00 +0000 NSString *stringDatee = @"Feb 28, 2013 05:30pm"; NSDateFormatter *dateFormatterr = [[NSDateFormatter alloc] init]; [dateFormatterr setDateFormat:@"MMM dd, YYYY hh:mma"]; NSDate *datee=[dateFormatterr dateFromString:stringDatee]; NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000 NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"]; NSString *dateString = [dateFormat stringFromDate:datee]; NSLog(@"date 3 : %@", dateString); //Jan 05, 2013 05:30PM

Como aquí, el resultado hasta la date y date diferente, que entendí, pero ¿por qué el resultado de la fecha 2 y la fecha 3 son diferentes? Como estoy creando una fecha desde una cadena e invirtiendo la misma en una cadena de nuevo, pero la salida no coincide?

¿Alguien sabe por qué? Aunque especifica la semana del año, aún así debería obtener el mismo resultado.

Gracias..

EDITAR: -

Si codigo

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"]; NSString *dateString = [dateFormatterr stringFromDate:[NSDate date]]; NSLog(@"date: %@", dateString); //Feb 28, 2013 04:37PM

Si me da el resultado correcto, pero el mismo que paso como cadena hasta la fecha, recibo 2013-01-05 12:00:00 +0000 , reviso la fecha 2 de NSLog, resultado extraño, ¿por qué?


Un error común es usar YYYY. yyyy especifica el año calendario, mientras que YYYY especifica el año (de "Semana del año"), que se utiliza en el calendario anual de ISO. En la mayoría de los casos, aaaa y YYYY producen el mismo número, sin embargo, pueden ser diferentes. Por lo general, debe usar el año calendario.

de Apple Docs


También cuando se usa una cadena de formato de fecha, es importante usar el formato correcto.

@ "YYYY" es un año calendario basado en la semana.

@ "aaaa" es un año calendario ordinario.

Puedes revisar todo el blog, es bueno echarle un vistazo

http://realmacsoftware.com/blog/working-with-date-and-time


Todas las respuestas que diferencian yyyy y YYYY son las respuestas correctas para otra pregunta. La pregunta en sí misma se refiere a otra cosa.

¿Por qué estos dos valores son diferentes? (extraído de la pregunta)

NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000 NSLog(@"Date 3 : %@", dateString); //Jan 05, 2013 05:30PM

La respuesta aquí @PJ es que no son realmente diferentes en valor. Cuando registra un NSDate (que es la Fecha 2), obtiene la descripción completa de su objeto que está en la zona horaria UTC. Esta lógica no ocurre cuando se registra la fecha 3 porque ya se convirtió en una cadena y se aplicó su zona horaria.

Para imprimir la Fecha 3 de la misma manera que está recibiendo la Fecha 2. Debe especificar la Zona horaria UTC para la Fecha 3. Algo así:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"]; [dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; NSString *dateString = [dateFormat stringFromDate:datee]; NSLog(@"date 3 : %@", dateString);

Espero que esto ayude.

tl; dr la zona horaria


dd/MMM/YYYY - e.g.:1 01/Jan/2000; answer : 19/dec/1999 (see weekly calendar December month last Monday suppose leaf year + 1 day) dd/MMM/yyyy - eg: ordinary - no problem.