我正在研究显示不同时区的时间的时间应用程序。为此,我使用标准时间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
)都给我错误的秒数
你可以检查_timezone的值是否同样为你设置? –
@JoeSmith是的,是的。 –
_timeZone的价值是什么?它从何而来? –