将字符串日期转换为NSDate时出现问题

时间:2014-04-21 07:52:31

标签: ios 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。

1 个答案:

答案 0 :(得分: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

NSLog的{​​{1}}根据此NSDate Format outputting wrong date输出无效,因此您的代码是正确的。

  

NSDate对格式化(只是日期信息)一无所知,NSDateFormatter对日期一无所知,只知道如何格式化日期。所以你必须使用像-stringFromDate这样的方法:知道当前或不是实际格式化日期以供人类可读的显示。

NSDATE