【发布时间】:2015-09-28 19:43:19
【问题描述】:
我正在开发一个显示不同时区时间的时间应用程序。为此,我使用标准时间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,但为什么即使两者(模拟器和设备)都在同一时区,它也会给我不同的秒数。
出了什么问题,我该如何解决?
注意
为了解决夏令时问题,我正在使用此代码。但它总是转到两个设备上的 else 部分。 (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
所以它没有使用夏令时。
注意 2
此问题仅在 iPad 2 中出现。其他设备正常。
注意 3
我的 iPad 2 使用 iOS 8.4 。两个时区(智利标准时间 -America/Santiago 和复活节岛标准时间 -Pacific/Easter)都给了我错误的秒数
【问题讨论】:
-
你能检查一下 _timeZone 的值是否对你所有的设置都一样吗?
-
@JoeSmith 是的,是的。
-
_timeZone 的值是多少?它来自哪里?
-
@JoeSmith _timeZone 是一个字符串,值为
America/Santiago。它存储在数据库中。
标签: ios objective-c cocoa-touch timezone nsdate