2015-07-10 16 views
9

Sto lavorando a un'app di tempo che visualizza l'ora di diversi fusi orari. Per questo sto usando un orario standard haDate (UTC tz).secondsFromGMT restituisce valori diversi su dispositivo e simulatore

Per displayDate sto usando api di fuso orario di sistema. Il fuso orario è America/Santiago (UTC-3: 00).

NSTimeZone *tz=[NSTimeZone timeZoneWithName:_timeZone]; 
_displayDate=[_haDate dateByAddingTimeInterval:tz.secondsFromGMT]; 

codice "haDate" -

NSDateFormatter *formatter=[[NSDateFormatter alloc]init]; 
formatter.timeZone=[NSTimeZone timeZoneWithName:@"UTC"]; 
NSString *utcTimeCurrent=[dict objectForKey:@"utctime"]; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
_haDate=[formatter dateFromString:utcTimeCurrent]; 

Il problema è quando ho eseguito questo codice sul simulatore tz.secondsFromGMT torna -10800 ma il dispositivo che restituisce -14400, che è di 1 ora in meno.

Dispositivo e simulatore che utilizza lo stesso timezone Asia/Kolkata (UTC + 5: 30). So che America/Santiago utilizza l'ora legale, ma perché mi sta dando diversi secondi anche se entrambi (simulatore e dispositivo) sono sullo stesso fuso orario.

Cosa c'è che non va e come posso risolverlo?

NOTA

Per fissare problema DST Sto usando questo codice. Ma va sempre nella parte opposta su entrambi i dispositivi. (BTW sotto codice non è necessario perché tz.secondsFromGMT ritornano sempre secondi dopo gli aggiustamenti DST.)

NSTimeZone *tz=[NSTimeZone timeZoneWithName:_timeZone]; 
if (tz.isDaylightSavingTime) 
{ 
    _displayDate=[_haDate dateByAddingTimeInterval:tz.secondsFromGMT+tz.daylightSavingTimeOffset]; 
} 
else 
{ 
    _displayDate=[_haDate dateByAddingTimeInterval:tz.secondsFromGMT]; 
} 

quando accedo al tz -

sul simulatore

tz America/Santiago (GMT-3) offset -10800

Sul dispositivo

tz America/Santiago (GMT-4) offset -14400

Quindi non utilizza l'ora legale.

NOTA 2

Questo problema si verifica solo in iPad 2. Altri dispositivi di funzionare bene.

NOTA 3

il mio iPad 2 utilizzando iOS 8.4. Entrambi i fusi orari (Ora standard Cile - America/Santiago e ora solare dell'isola di Pasqua - Pacific/Easter) mi danno i secondi sbagliati

+0

Potete controllare se il valore della _timeZone è lo stesso per tutti voi messe a punto? –

+0

@JoeSmith sì, lo è. –

+0

Qual è il valore di _timeZone? Da dove proviene? –

risposta

0

Cile ha cambiato la TZ all'inizio del 2015. Probabilmente il tuo iPad 2 ha una versione iOS utilizzando un database dei fusi orari obsoleto . Aggiornalo

Il tempo in Cile è diviso in due fusi orari. Il Cile continentale utilizza l'offset dell'ora UTC-03: 00. Inoltre, l'Isola di Pasqua utilizza l'offset dell'ora UTC-05: 00.[1]

Fino al 2015, il Cile continentale ha utilizzato l'ora UTC-04: 00 e l'isola di Pasqua UTC-06: 00 utilizzate per l'ora solare, con l'ora legale approssimativamente tra ottobre e marzo di ogni anno. Tuttavia, nel gennaio 2015 è stato annunciato che tutto il paese manterrà l'offset temporale utilizzato durante l'ora legale.

https://en.wikipedia.org/wiki/Time_in_Chile

+0

Il mio ipad ha iOS 8.4. E sì, una cosa in più entrambi i fusi orari (Cile continentale e Isola di Pasqua) mi stanno dando dei secondi sbagliati. Domanda aggiornata. –

+0

Hmmm, iOS 8 pubblicato a settembre 2014, 8,4 a metà 2015. Forse Apple non voleva cambiare la TZ sui dispositivi più vecchi per alcuni motivi? Cosa succede se provi un'altra città nella stessa TZ, ma fuori dal Cile? –

+0

ho un iPhone 4S (fine 2011) e l'ora è corretta su 4S. Ha problemi solo su iPad 2. –

Problemi correlati