2015-07-10 47 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上有问题。 –

相关问题