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
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.