Este códigodateFromComponents NSCalendar: GMT zona horaria en lugar de systemTimeZone
NSCalendar *calendar =[NSCalendar currentCalendar];
[gregorian setTimeZone:tz];
NSLog(@"%@", [gregorian timeZone]);
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit) fromDate:[NSDate date]];
[comp setDay:info.day];
[comp setMonth:info.month];
[comp setYear:info.year];
[comp setHour:info.hour];
[comp setMinute:info.minute];
[comp setSecond:info.second];
[comp setTimeZone:tz];
NSLog(@"%@", [comp timeZone]);
NSLog(@"%@", [gregorian dateFromComponents:comp]);
muestra lo siguiente en la consola:
Europe/Moscow (MSKS) offset 14400 (Daylight)
Europe/Moscow (MSKS) offset 14400 (Daylight)
2011-08-31 20:00:00 +0000
Por lo tanto, la zona horaria para el calendario y los componentes se especifica correctamente, pero [gregorian dateFromComponents:comp]
devuelve valor NSDate con la zona horaria incorrecta (GMT).
¿Qué debo corregir para obtener la zona horaria correcta?
Si NSLog un 'NSDate'object directamente, siempre obtendrá su representación GMT. De todos modos, los objetos 'NSDate' no tienen ningún concepto de zonas horarias en absoluto. Representan un instante instantáneo ** absoluto ** medido a partir de una fecha de referencia. Puede obtener diferentes representaciones * legibles para el ser humano * de la fecha para las diferentes zonas horarias usando un 'NSDateFormatter', pero eso, representaciones. – albertamg
Creo que NSDate oculta la zona horaria de la que se deriva en los bits insignificantes de la marca de tiempo. Sin embargo, esto solo está destinado a ser utilizado para [descripción de NSDate] y, en el mejor de los casos, no es confiable. –
Sí, tienes razón, muchachos. Gracias, ahora lo entiendo :) – Mitry