2015-07-10 84 views
9

我正在研究顯示不同時區的時間的時間應用程序。爲此,我使用標準時間haDate(UTC tz)。secondsFromGMT在設備和模擬器上返回不同的值

對於displayDate我使用的是系統時區api。時區爲America/Santiago(UTC-3:00)。

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

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

的問題是當我運行上模擬器tz.secondsFromGMT返回-10800這個代碼,但在設備上,它返回-14400,其爲1小時以下。

設備和模擬器使用相同的時間區域Asia/Kolkata(UTC + 5:30)。我知道America/Santiago使用DST,但它爲什麼給我不同的秒數,即使兩個(模擬器和設備)都在同一時間區域。

什麼是錯,我該如何解決?

要解決DST問題我使用這個代碼。但它總是轉到兩個設備上的其他部分。 (BTW下面是不需要的代碼,因爲tz.secondsFromGMT後始終DST調整返回秒。)

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

當我登錄的TZ -

在模擬器

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

在設備

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

所以它沒有使用DST。

注2:

此問題僅出現在iPad 2的其他設備工作正常。

注3

我的ipad 2使用的是iOS 8.4。兩個時區(智利標準時間 - America/Santiago和復活節島標準時間 - Pacific/Easter)都給我錯誤的秒數

+0

你可以檢查_timezone的值是否同樣爲你設置? –

+0

@JoeSmith是的,是的。 –

+0

_timeZone的價值是什麼?它從何而來? –

回答

0

智利在2015年初更改了TZ。可能您的iPad 2的iOS版本使用的是過時的時區數據庫。更新它。

智利時間分爲兩個時區。大陸智利使用時間抵消UTC-03:00。此外,復活節島使用時間抵消UTC-05:00。[1]

直到2015年,大陸智利使用時間抵消UTC-04:00,復活節島使用UTC-06:00作爲標準時間,夏令時約爲每年10月至3月。然而,在2015年1月宣佈全國將保持夏令時使用的時間偏移量。

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

+0

我的ipad有ios 8.4。是的,更多的兩個時區(智利大陸和復活節島)給我錯誤的時間。問題已更新。 –

+0

嗯,2014年9月發佈的iOS 8,8.4 2015年中。也許蘋果公司並不想因爲某些原因在舊設備上更改TZ?如果您嘗試在同一個TZ的另一個城鎮,但在智利以外的地方會發生什麼? –

+0

我有一個iPhone 4S(2011年末),時間在4S上是正確的。它僅在iPad 2上有問題。 –

相關問題