Em cacau, como faço para usar NSTimeZone para obter o deslocamento como uma cadeia de fuso horário do sistema?
-
20-08-2019 - |
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
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)