Em cacau, como faço para usar NSTimeZone para obter o deslocamento como uma cadeia de fuso horário do sistema?

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

Pergunta

Para PDT, eu gostaria "-0700".

Estou recebendo uma data no passado para determinar há quanto tempo alguma coisa aconteceu.

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

Eu vou estar construindo a seqüência de data em outro lugar, mas eu não sei como acessar o fuso horário local.

Eu li as datas da Apple e tópicos de programação vezes para Cacau, bem como as referências NSTimeZone e NSDate Classe, mas é muito difícil para mim colocar as informações em conjunto. Eu poderia realmente usar algumas linhas de código apenas para mostrar como ele é usado.

Atualizar : Embora lutando com isso, eu estava escrevendo código usando um modelo de linha de comando para que eu pudesse tentar coisas rapidamente. Eu apenas tentei meu código anterior no iPhone e eu estou ficando NSDate pode não responder a '+ dateWithString:'. Desculpe se que aumentou a confusão, que conhecia a Apple iria mudar-se uma classe tão básico

Foi útil?

Solução

A diferença de fuso horário é dependente da data em grande parte do mundo-as partes de que o uso Daylight-Saving Time / Horário de Verão.

A única maneira correta é gerar toda a cadeia de data e juntas de fuso horário. Use NSDateFormatter para isso.

Outras dicas

Use NSDateFormatter para construir NSDate a partir de uma string:

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);

Desta forma você obter a hora local de corda, por exemplo, a data especificada pela string:

"1976/04/01 00:34:56 -0700"

está em -0700 fuso horário, (eu sou no fuso horário GMT +1000) para que eu recebo:

2009-11-17 22: 13: 46,480 cmdline [10593: 903] Data: 1976/04/02 05:34:56 +1000

A melhor maneira é provavelmente usar um calendário simples formatador

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

qual a saída vontade '-0700'

ou deixar de fora a segunda linha se quiser que o fuso horário atual do sistema (não tenho certeza que você estava pedindo)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top