Diferencia entre 'AAAA' y 'aaaa' en NSDateFormatter

Resuelto P.J asked hace 54 años • 4 respuestas

¿Cuál es la diferencia exacta entre 'AAAA' y 'aaaa'? Leí en este enlace que dice que

Un error común es utilizar AAAA. yyyy especifica el año calendario, mientras que AAAA especifica el año (de "Semana del año"), utilizado en el calendario ISO año-semana. En la mayoría de los casos, yyyy y YYYY dan el mismo número, aunque pueden ser diferentes. Normalmente debería utilizar 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 es datediferente datee, lo cual entendí, pero ¿por qué el resultado de la fecha 2 y la fecha 3 son diferentes? Mientras estoy creando una fecha a partir de una cadena y volviendo a invertir la misma en la cadena, ¿pero la salida no coincide?

¿Alguien sabe la razón sobre lo mismo? Aunque especifica la semana del año, debería obtener el mismo resultado.

Gracias..

EDITAR :-

Si codifico

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 el resultado es el correcto, pero lo paso como cadena hasta la fecha, obtengo 2013-01-05 12:00:00 +0000, verifique la fecha 2 de NSLog, resultado extraño, ¿por qué?

P.J avatar Jan 01 '70 08:01 P.J
Aceptado

Además, cuando se utiliza una cadena con formato de fecha, es importante utilizar el formato correcto.

@"AAAA" es un año calendario semanal.

@"yyyy" es el año calendario ordinario.

Puedes revisar el blog completo, es bueno echarle un vistazo.

ingrese la descripción de la imagen aquí

https://web.archive.org/web/20150423093107/http://realmacsoftware.com/blog/working-with-date-and-time

http://realmacsoftware.com/blog/working-with-date-and-time (enlace inactivo)

X-Factor avatar Feb 28 '2013 10:02 X-Factor

Un error común es utilizar AAAA. yyyy especifica el año calendario, mientras que AAAA especifica el año (de "Semana del año"), utilizado en el calendario ISO año-semana. En la mayoría de los casos, yyyy y YYYY dan el mismo número, aunque pueden ser diferentes. Normalmente debería utilizar el año calendario.

de Documentos de Apple

Gardner Bickford avatar Feb 28 '2013 10:02 Gardner Bickford
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.
gowthaman-mallow avatar Feb 13 '2016 09:02 gowthaman-mallow

Todas las respuestas son diferenciadoras yyyyy YYYYson respuestas correctas para otra pregunta. La pregunta en sí 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 en realidad no tienen un valor diferente. Cuando registra una NSDate (que es la Fecha 2), obtiene la descripción completa de su objeto que se encuentra en la zona horaria UTC . Esta lógica no ocurre al registrar 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 obtiene la Fecha 2. Debe especificar la zona horaria UTC para la Fecha 3. Algo como esto:

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

CoderPug avatar Dec 06 '2016 20:12 CoderPug