如何格式化string2013-01-27T02:31:47 + 08:00到NSDate

我已经多次尝试将string2013-01-27T02:31:47+08:00转换为NSDate。 我已经find了苹果的格式指南 ,并复制了它的代码,并尝试,但它不起作用。

  NSDateFormatter *rfc3339DateFormatter = [[NSDateFormatter alloc] init]; NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; [rfc3339DateFormatter setLocale:enUSPOSIXLocale]; [rfc3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"]; [rfc3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8]]; // Convert the RFC 3339 date time string to an NSDate. NSDate *date = [rfc3339DateFormatter dateFromString:@"2013-01-27T02:31:47+08:00"]; 

你的格式应该是@"yyyy-MM-dd'T'HH:mm:ssZZZZZ" 。 你只需要在格式化程序不会使用的字母周围使用单引号。

  NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; [dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; NSString *dateTimeString = @"2013-01-09 16:00:00"; NSLog(@"DateTimeString = %@", dateTimeString); NSDate *myDate =[dateFormat dateFromString:dateTimeString]; NSLog(@"myDate: %@", myDate); 

输出:

  dateTimeString = 2013-01-09 16:00:00 myDate: = 2013-01-09 16:00:00 +0000 

要向用户显示一个date,请使用stringFromDate将NSDate转换为NSString,但不要设置时区(以便使用本地时区):

  NSDateFormatter *dateFormat2 = [[NSDateFormatter alloc] init]; [dateFormat2 setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString *localDateString = [dateFormat2 stringFromDate:myDate]; NSLog(@"localDateString: %@", localDateString); 

输出:

  localDateString: 2013-01-09 17:00:00