Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.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
Iphone NSDate和设备';s时区_Iphone_Objective C_Ios - Fatal编程技术网

Iphone NSDate和设备';s时区

Iphone NSDate和设备';s时区,iphone,objective-c,ios,Iphone,Objective C,Ios,我试图用以下代码解析这样的日期:2012-10-20T13:45:00+002: NSDateFormatter* formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"]; NSDate *date = [formatter dateFromString:@"2012-10-20T13:45:00+002"]; 但是,当我尝试在设备上输出它时,它的时区已经是

我试图用以下代码解析这样的日期:
2012-10-20T13:45:00+002

NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSDate *date = [formatter dateFromString:@"2012-10-20T13:45:00+002"];
但是,当我尝试在设备上输出它时,它的时区已经是+2,请使用以下命令:

NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"HH:mm"];
dateformatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"ar_EG"];
cell.infoLabel.text = [dateFormatter stringFromDate:date];
输出是:15:43,而不是应该的13:45。 任何帮助都将不胜感激。
PS:我在iPhone上运行iOS5/6,Xcode 4.5,我在模拟器和物理设备上都进行了尝试。

您需要添加区域设置和时区

[dateFormatter setLocale:[NSLocale systemLocale]];//所需的区域设置
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];//时区相同


非常感谢,但是没有任何改变,还有其他想法吗?你能试着用这个YYYY-MM-dd'T'HH:MM:ssZZZ加上大写的y。ZZZ字段中的一个非常难看的符号是以分钟表示的,而不是以小时表示的。太棒了!非常感谢。这就是原因!我还想知道为什么它会提前2分钟显示日期。你能告诉我正确的符号是什么吗?我试着读入,但我不确定。我相信您需要在时间戳的末尾附加一对零,为了让它正确解析。我尝试了它,但似乎不起作用:原始字符串:2012-11-25T16:00:00+002在添加零后:2012-11-25T16:00:00+00200 NSDate对象的NSLog:2012-11-25 15:58:00+000可能是格式化程序无法处理额外的前导零。(但您确定要将修改后的字符串传递给格式化程序,而不是原始字符串吗?)