【问题标题】:secondsFromGMT returns different values on device and simulatorsecondsFromGMT 在设备和模拟器上返回不同的值
【发布时间】: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


【解决方案1】:

智利在 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

【讨论】:

  • 我的 ipad 有 ios 8.4。是的,两个时区(智利大陆和复活节岛)都给了我错误的秒数。问题已更新。
  • 嗯,iOS 8 于 2014 年 9 月发布,8.4 于 2015 年中发布。也许 Apple 出于某些原因不想更改旧设备上的 TZ?如果您尝试在同一个 TZ 中但在智利以外的另一个城镇会发生什么?
  • 我有一部 iPhone 4S(2011 年末),4S 上的时间是正确的。仅在 iPad 2 上存在问题。
  • 真的很奇怪。提交错误?您是否阅读过有关 GMT 错误的信息?您是否连接到 iPad 上的其他日历? (谷歌,MS)
  • 是的,我提交了一个错误。我没有使用其他日历服务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 2011-02-07
  • 2021-01-27
  • 2018-08-27
  • 1970-01-01
  • 2016-12-03
相关资源
最近更新 更多