2014-04-21 58 views
0

我有这个字符串日期:问题一个字符串日期转换成NSDate的

2014-04-21T07:55:13Z 

,当我将其转换成的NSDate我有像每小时6:55 ...... 1小时不到。为什么?

这是我使用的转换代码:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 
NSDate *newDate = [dateFormatter dateFromString:dateStr]; 

newDate现在2014-04-21 06:55:13 +0000 !!! ???

有什么不对?

注意:如果日期是我的本地时间(GMT + 1)被转换为GMT,那么少一个小时会有意义。但如果Z是零偏移量(= GMT),那么日期已经是GMT。

+0

看看这篇文章。 http://stackoverflow.com/questions/12033892/converting-date-of-format-yyyy-mm-ddthhmmss-sss – rustylepord

回答

1

我不认为你的代码是错误的。使用此代码: -

NSString *dateStr = @"2014-04-21T07:55:13Z"; 

// Convert string to date object 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 
NSDate *date = [dateFormat dateFromString:dateStr]; 

NSLog(@" date log %@",date); //2014-04-21 02:25:13 +0000 output 

// Convert date object to desired output format 
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 
dateStr = [dateFormat stringFromDate:date]; 

NSLog(@"string %@",dateStr); //2014-04-21T07:55:13Z output 

NSDATENSLog是不是按照这个NSDate Format outputting wrong date输出正确的所以你的代码是正确的。

NSDate不知道任何关于格式化(只是日期信息),NSDateFormatter并不知道任何有关日期,只是如何格式化它们。所以你必须使用像-stringFromDate这样的方法:因为知道是否是当前或未实际格式化日期以便人可读的显示。

NSLog(@" date is %@",[dateFormat stringFromDate:date]); 
+0

我的日期包含一个Z,这意味着它已经是GMT0,现在可以将NSDate转换为GMT日期已经是GMT。我首先想到NSDate正在考虑我的本地时区是GMT + 1,但后来我确认,当它将那个已经是格林威治标准时间的日期转换成GMT时,它会减去一个小时。换句话说,它将格林尼治标准时间转换为格林尼治标准时间,将其转换为GMT-1 !!!!!!!! – SpaceDog

+0

你是对的,我现在证明你不应该** **的神秘方式 - 而且我不能把它放得足够大 - 相信NSDate。 – SpaceDog