我正在开发一个显示不同时区时间的时间应用程序。为此,我使用的是标准时间haDate
(UTC tz)。
对于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小时)。设备和模拟器使用相同的timeZone
Asia/Kolkata
(UTC + 5:30)。我知道America/Santiago
使用DST,但是为什么即使模拟器(和设备)都在同一timeZone上却给我不同的秒数呢?有什么问题,我该如何解决?
注意
为了解决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
)都给我错误的秒数 最佳答案
智利在2015年初更改了TZ。您的iPad 2可能使用了过时的时区数据库,并且为iOS版本。更新它。
https://en.wikipedia.org/wiki/Time_in_Chile
关于ios - secondsFromGMT在设备和模拟器上返回不同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31334312/