2016-07-29 114 views
0

我试图从UTC时间字符串获取NSDate对象。时间字符串的例子是这样的:从UTC格式的时间字符串获取NSDate

2016-07-29T11:43:55+02:00 

我使用NSDateFormatter并设置酸盐,为:yyyy-MM-dd'T'HH:mm:ss

但是这给了我取不正确的时区。所以上述日期将是:2016-07-29T09:43:55 + 00:00

我该如何保持时区方面?

我曾尝试加入'Z'到格式化的结束,而是刚刚返回一个零日期。

+0

这是正确的。 9比当地时间晚两个小时。 – Tander

+1

[转换ISO 8601来的NSDate(http://stackoverflow.com/questions/17558859/convert-iso-8601-to-nsdate) – vadian

+0

您的日期格式是正确的,日期字符串正确地分析,所以有可能的复制你问你是如何检测GMT抵消传入的日期字符串? – Droppy

回答

2

试试这个

NSDateFormatter *userFormatter = [[NSDateFormatter alloc] init]; 
[userFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; 
NSLocale *posix = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
[userFormatter setLocale:posix]; 
NSString *dateConverted = [userFormatter stringFromDate:theDate]; 
+0

这是行不通的(格式化程序中缺少'T')并且它不回答问题。 – Droppy

0

感谢社会各界的帮助。解决了这个问题。我的iOS模拟器上的时间是正确的。不过,当我拨打[NSDate date];时,它显示了当地时间两小时前的一段时间。因此,我在NSDate的格式中看到了'错误'。

+0

显示你在哪里? NSLog()'有什么机会? – Droppy

+0

是的,NSLog。是否有理由为什么iOS模拟器显示正确的时间,但NSLog没有? – Tander

+0

认真;这可能是stackoverflow上最常见的问题,我没有看到任何iOS/OSX开发人员不知道的原因。 'NSLog()'调用'[NSDate description]'和'description'格式化UTC时区的日期。要在不同时区显示日期,请设置一个'NSDateFormatter'(包括时区)并使用它来执行日期 - >字符串转换。 – Droppy