En Cocoa, ¿cómo uso NSTimeZone para obtener el desplazamiento de la zona horaria del sistema como una cadena?

StackOverflow https://stackoverflow.com/questions/1052373

Pregunta

Para PDT, me gustaría " -0700 " ;.

Tengo una cita en el pasado para determinar hace cuánto tiempo sucedió algo.

NSDate *then = [NSDate dateWithString:@"1976-04-01 12:34:56 -0700"]; // Note the hard-coded time zone at the end

Construiré la cadena de fecha en otro lugar, pero no sé cómo acceder a la zona horaria local.

Leí los Temas de programación de Apple Dates and Times para Cocoa, así como las Referencias de clase NSTimeZone y NSDate, pero es demasiado difícil para mí reunir la información. Realmente podría usar algunas líneas de código solo para mostrar cómo se usa.

Actualización : Mientras luchaba con esto, estaba escribiendo código usando una plantilla de Línea de Comando para poder probar las cosas rápidamente. Acabo de probar mi código anterior en iPhone y obtengo NSDate puede no responder a '+ dateWithString:' Lo siento si eso se agrega a la confusión, quién sabía que Apple cambiaría una clase tan básica.

¿Fue útil?

Solución

El desplazamiento de la zona horaria depende de la fecha en gran parte del mundo & # 8212; aquellas partes que usan el horario de verano / horario de verano.

La única forma correcta es generar la cadena completa a partir de la fecha y la zona horaria juntas. Use NSDateFormatter para esto.

Otros consejos

Use NSDateFormatter para construir NSDate a partir de una cadena:

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

NSDate *formatterDate;
formatterDate = [inputFormatter dateFromString:@"1976-04-01 12:34:56 -0700"];

NSString *dateString = [inputFormatter stringFromDate:formatterDate];

NSLog(@"date:%@", dateString);

De esta forma obtiene la hora local de la cadena, por ejemplo, la fecha especificada por la cadena:

  

" 1976-04-01 12:34:56 -0700 "

está en la zona horaria - 0700, (estoy en la zona horaria GMT +1000), así que obtengo:

  

2009-11-17 22: 13: 46.480   cmdline [10593: 903] fecha: 1976-04-02   05:34:56 +1000

La mejor manera es probablemente usar un formateador de calendario simple

NSCalendarDate * date = [NSCalendarDate calendarDate];
[date setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"PDT"]];
NSLog([date descriptionWithCalendarFormat:@"%z"]);

que generará '-0700'

o omita la segunda línea si desea la zona horaria actual del sistema (no estoy seguro de qué estaba pidiendo)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top