NSString到NSDate错误的结果

时间:2013-03-27 19:01:48

标签: ios nsdate

在我的iOS应用中,我试图将字符串格式的日期转换为NSDate。我首先将字符串放在正确的格式中,但是当它将其更改为NSDate时,我得到一个不同的输出日期。在下面的代码中,我放了两个NSLog,它们显示字符串与日期格式匹配,所以我迷失了为什么输出不同。

NSString * list = @"Sun, 24 Mar 2013 21:08:02 +0000";
NSArray *listItems = [list componentsSeparatedByString:@", "];
//24 Mar 2013 21:08:02 +0000

NSArray *listItems1 = [[listItems objectAtIndex:1] componentsSeparatedByString:@" "];
NSString *timeSubString = [[listItems1 objectAtIndex:3] substringWithRange:NSMakeRange(0,5)];
NSString * newConcat = [NSString stringWithFormat:@"%@-%@-%@ %@",[listItems1 objectAtIndex:0],[listItems1 objectAtIndex:1],[listItems1 objectAtIndex:2], timeSubString];
NSLog(@"***DATE STRING***: %@",newConcat);
//***DATE STRING***: 24-Mar-2013 21:08

NSDateFormatter* fmt = [NSDateFormatter new];
[fmt setDateFormat:@"dd-MMM-YYYY HH:mm"];
NSDate* date = [fmt dateFromString:newConcat];
NSLog(@"***OUTPUT DATE***: %@",date);
//***OUTPUT DATE***: 2013-01-06 02:08:00 +0000
NSLog(@"***DATE STRING***: %@", [fmt stringFromDate:date]);
//***DATE STRING***: 05-Jan-2013 21:08

1 个答案:

答案 0 :(得分:2)

你可以用这个

做同样的事情
NSString *dateString = @"Sun, 24 Mar 2013 21:08:02 +0000";
NSDateFormatter *dateFormatter = [NSDateFormatter new];
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[dateFormatter setLocale:enUSPOSIXLocale];
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];

NSDate *date = [dateFormatter dateFromString:dateString];
[dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm"];

NSString *newDateString = [dateFormatter stringFromDate:date];