2015-07-10 4 views
9

Ich arbeite an einer Zeit-App, die die Zeit verschiedener Zeitzonen anzeigt. Dazu verwende ich eine Standardzeit haDate (UTC tz).secondsFromGMT gibt verschiedene Werte auf Gerät und Simulator zurück

Für displayDate verwende ich Systemzeitzone api. Zeitzone ist America/Santiago (UTC-3: 00).

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

"haDate" Code -

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

Das Problem ist, wenn ich diesen Code auf Simulator laufen tz.secondsFromGMT-10800 aber auf dem Gerät gibt es zurück -14400, das ist 1 Stunde weniger.

Gerät und Simulator mit der gleichen Zeitzone Asia/Kolkata (UTC + 5: 30). Ich weiß, America/Santiago verwendet DST, aber warum gibt es mir verschiedene Sekunden sogar beide (Simulator und Gerät) sind auf der gleichen timeZone.

Was ist falsch und wie kann ich es beheben?

HINWEIS

DST Problem zu beheben ich diesen Code verwenden. Aber es geht immer auf beiden Geräten zum else Teil. (BTW unten Code nicht erforderlich, da tz.secondsFromGMT immer zurückkehren Sekunden nach DST Anpassungen.)

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

Wenn ich die tz log -

Auf Simulator

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

auf Device

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

So verwendet es nicht DST.

ANMERKUNG 2

Dieses Problem tritt nur in iPad 2. Andere Geräte arbeiten gut auftritt.

ANMERKUNG 3

Mein iPad 2 mit iOS 8.4. Beide Zeitzonen (Chile Standard Time - America/Santiago und Osterinsel Standard Time - Pacific/Easter) geben mir falsche Sekunden

+0

können Sie überprüfen, ob der Wert von _timezone gleich für alle Setups ist? –

+0

@JoeSmith Ja, es ist. –

+0

Was ist der Wert von _timeZone? Woher kommt das? –

Antwort

0

Chile hat den TZ Anfang 2015 geändert. Wahrscheinlich hat Ihr iPad 2 eine iOS Version mit einer veralteten Zeitzonendatenbank . Aktualisiere es.

Die Zeit in Chile ist in zwei Zeitzonen unterteilt. Continental Chile verwendet den Zeitversatz UTC-03: 00. Darüber hinaus verwendet Osterinsel den Zeitversatz UTC-05: 00.[1]

Bis 2015 nutzte Continental Chile den Zeitversatz UTC-04: 00 und Osterinsel UTC-06: 00 für die Standardzeit, wobei die Sommerzeit in der Regel zwischen Oktober und März eines jeden Jahres liegt. Im Januar 2015 wurde jedoch bekannt gegeben, dass das ganze Land den Zeitausgleich während der Sommerzeit beibehalten wird.

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

+0

Mein iPad hat IOS 8.4. Und ja, eine Sache mehr beide Zeitzonen (Continental Chile und Osterinsel) geben mir falsche Sekunden. Frage aktualisiert –

+0

Hmmm, iOS 8 veröffentlicht im September 2014, 8.4 Mitte 2015. Vielleicht wollte Apple aus bestimmten Gründen die TZ auf älteren Geräten nicht ändern? Was passiert, wenn Sie eine andere Stadt im selben TZ versuchen, aber außerhalb von Chile? –

+0

Ich habe ein iPhone 4S (Ende 2011) und die Zeit ist korrekt auf 4S. Es hat nur auf iPad 2 Problem. –