Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios secondsFromGMT在设备和模拟器上返回不同的值_Ios_Objective C_Cocoa Touch_Timezone_Nsdate - Fatal编程技术网

Ios secondsFromGMT在设备和模拟器上返回不同的值

Ios secondsFromGMT在设备和模拟器上返回不同的值,ios,objective-c,cocoa-touch,timezone,nsdate,Ios,Objective C,Cocoa Touch,Timezone,Nsdate,我正在开发一个显示不同时区时间的时间应用程序。为此,我使用标准时间haDate(UTC tz) 对于displayDate我使用的是系统时区api。时区是美国/圣地亚哥(UTC-3:00) “haDate”代码- 问题是当我在模拟器tz上运行此代码时。secondsFromGMT返回-10800,但在设备上它返回-14400,这要少1小时 使用相同时区的设备和模拟器(UTC+5:30)。我知道美国/Santiago使用DST,但为什么它会给我不同的秒数,即使两者(模拟器和设备)在同一时区 什么地

我正在开发一个显示不同时区时间的时间应用程序。为此,我使用标准时间
haDate
(UTC tz)

对于
displayDate
我使用的是系统时区api。时区是美国/圣地亚哥(UTC-3:00)

“haDate”代码-

问题是当我在模拟器
tz上运行此代码时。secondsFromGMT
返回
-10800
,但在设备上它返回
-14400
,这要少1小时

使用相同时区的设备和模拟器(UTC+5:30)。我知道
美国/Santiago
使用DST,但为什么它会给我不同的秒数,即使两者(模拟器和设备)在同一时区

什么地方出了问题,我该如何解决

注意

为了解决DST问题,我正在使用此代码。但它总是转到两台设备上的其他部分(顺便说一句,不需要下面的代码,因为
tz.secondsFromGMT
总是在DST调整后返回秒数。)

当我记录日志时-

关于模拟器

tz美国/圣地亚哥(GMT-3)偏移量-10800

在设备上

tz美国/圣地亚哥(GMT-4)偏移量-14400

因此,它没有使用DST

注2

这个问题只发生在iPad2上。其他设备工作正常

注3


我的iPad2使用iOS 8.4。这两个时区(智利标准时间-
美国/圣地亚哥
和复活节岛标准时间-
太平洋/复活节
)给了我错误的秒数

智利在2015年初更改了TZ。也许你的iPad2有一个使用过时时区数据库的iOS版本。更新它

智利的时间分为两个时区。智利大陆使用时间偏移UTC−03:00. 此外,Easter Island使用时间偏移UTC−05:00[1]

2015年之前,智利大陆集团使用UTC时间偏移−04:00和复活节岛使用UTC−标准时间为06:00,夏令时大约在每年10月至3月之间。然而,2015年1月宣布全国将保留夏时制期间使用的时间偏移


你能检查一下你所有设置的_时区的值是否相同吗?@JoeSmith是的,它是。什么是_时区的值?它来自哪里?@JoeSmith\u时区是一个字符串,值是
America/Santiago
。它存储在数据库中。我的ipad有ios 8.4。是的,还有一件事,两个时区(智利大陆和复活节岛)给了我错误的秒数。问题更新。嗯,iOS 8于2014年9月发布,2015年年中发布8.4。也许出于某些原因,苹果不想改变旧设备上的TZ?如果你在同一个TZ,但在智利以外的另一个城市试一试,会发生什么?我有一个iPhone4S(2011年底),时间在4S上是正确的。它只在iPad2上有问题。真的很奇怪。提交一个bug?你读过关于GMT错误的报道吗?您是否连接到iPad上的其他日历?(谷歌,MS)是的,我提交了一个bug。我没有使用其他日历服务。
NSTimeZone *tz=[NSTimeZone timeZoneWithName:_timeZone];
_displayDate=[_haDate dateByAddingTimeInterval:tz.secondsFromGMT];
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];
NSTimeZone *tz=[NSTimeZone timeZoneWithName:_timeZone];
if (tz.isDaylightSavingTime)
{
    _displayDate=[_haDate dateByAddingTimeInterval:tz.secondsFromGMT+tz.daylightSavingTimeOffset];
}
else
{
    _displayDate=[_haDate dateByAddingTimeInterval:tz.secondsFromGMT];
}