In Cocoa, come posso utilizzare NSTimeZone per ottenere l'offset del fuso orario del sistema come stringa?

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

Domanda

Per PDT, vorrei " -0700 " ;.

Ricevo una data in passato per determinare da quanto tempo è successo qualcosa.

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

Costruirò la stringa di date altrove ma non so come accedere al fuso orario locale.

Ho letto gli argomenti di programmazione di date e orari di Apple per Cocoa, nonché i riferimenti alle classi NSTimeZone e NSDate, ma è troppo difficile per me mettere insieme le informazioni. Potrei davvero usare alcune righe di codice solo per mostrare come viene utilizzato.

Aggiorna : mentre ero alle prese con questo, stavo scrivendo codice usando un modello da riga di comando in modo da poter provare rapidamente le cose. Ho appena provato il mio codice precedente su iPhone e sto ricevendo NSDate potrebbe non rispondere a '+ dateWithString:' Scusate se questo ha aggiunto alla confusione, chi sapeva che Apple avrebbe cambiato una classe di base.

È stato utile?

Soluzione

L'offset del fuso orario dipende dalla data in gran parte del mondo & # 8212; quelle parti di esso che usano l'ora legale / ora legale.

L'unico modo corretto è generare l'intera stringa da data e fuso orario insieme. Usa NSDateFormatter per questo.

Altri suggerimenti

Usa NSDateFormatter per costruire NSDate da una stringa:

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

In questo modo si ottiene l'ora locale dalla stringa, ad esempio la data specificata dalla stringa:

  

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

è nel fuso orario - 0700, (sono nel fuso orario GMT +1000) quindi ottengo:

  

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

Il modo migliore è probabilmente usare un semplice formattatore di calendario

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

che produrrà '-0700'

o tralascia la seconda riga se desideri il fuso orario corrente del sistema (non sei sicuro di quale stavi chiedendo)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top