Domanda

ho un appuntamento, 2010-08-23 13:30:00 -0400 e sto cercando di farlo nel fuso orario UTC +2. La differenza in secondi è 21600, ma quando chiamo [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];, ottengo 2010-08-24 01:30:00 +0200 che dovrebbe essere 2010-08-23 19:30:00 +0200. Qualche idea di cosa sto facendo male?

È stato utile?

Soluzione

Un oggetto data rappresenta un momento specifico nel tempo, indipendentemente da ciò che gli orologi di persone diverse avrebbe potuto dire in quel momento.

Fuso orario essere coinvolti quando si desidera visualizzare la data, dal momento che sarete in genere di visualizzare ciò che l'orologio dell'utente avrebbe detto (o sta dicendo, o dirà) in quel momento. Questo è esattamente ciò che accade quando si NSLog un NSDate:. La descrizione del data è quel momento di tempo rappresentato nel fuso orario locale

Aggiunta o sottraendo un NSDate non è la conversione del fuso orario. Addizione e sottrazione NSDates producono rappresentano altro momenti nel tempo; nel tuo caso, si sta creando un NSDate per un attimo 6 ore più tardi dal momento in cui si è iniziato con, non nello stesso istante dall'altra parte del pianeta.

Per semplificare, conversione del fuso orario sta esaminando contemporaneamente diversi punti nello spazio (diverse sezioni della superficie del pianeta), mentre quella di addizione e sottrazione sono < em> di calcolo diversi tempi .

Non v'è alcuna conversione di fuso orario per un NSDate, perché non è in un fuso orario per cominciare. Un fuso orario viene coinvolto solo quando si formatta la data per quel fuso orario. Così, per visualizzare tale data in qualche altro fuso orario, basta fare quello. Tipicamente, questo significa che alimentano il fuso orario desiderato al tuo data formattatore .

Altri suggerimenti

Vedo che la data si torna ha un diverso fuso orario non +200 -400. Se si nota vedrete che quel risultato è esattamente 12 ore (o 6 ore + 6 ore) entro e non oltre la data originale. hai per caso modificare le impostazioni internazionali e quando hai fatto la nuova data? Quando hai fatto il cambiamento che è iniziato dando +200 invece di -400 sistema regolato automaticamente il tempo per compensare, poi si è aggiunto un altro 6 ore per la data. NSDate memorizza tutte le date come un intervallo di tempo dal 1 gennaio 2001 GMT e regola per fusi orari a seconda delle necessità.

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