设置NSDateFormatter的日期格式

我正在尝试设置“2011-04-21 03:31:37.310396”之类的日期格式。 我想我没有得到正确的小数秒。 我正在查看http://unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns以获取有关如何指定它的指导原则,我认为我的问题在于格式本身。

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ssSSSSSS"; NSDate* serverDate = [dateFormatter dateFromString:stringFormOfDate]; 

帮帮我?

尝试

 NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss.SSSSSS"; NSDate* serverDate = [dateFormatter dateFromString:@"2011-04-21 03:31:37.310396"]; NSLog(@"%@", serverDate); 

我想你可能忘记了这个点

根据Zaph在另一个答案中的评论:S的最大数量为3.再做一次只产生零。

例如

 dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss.SSSSSS"; // Last 3 'S' ignored. Then @"2011-04-21 03:31:37.311396" will produce 2011-04-21 03:31:37.311000 

要保持完整的微秒级精度,请尝试以下方法:

 -(NSDate *)_dateFromUtcString:(NSString *)utcString{ if(!utcString){ return nil; } static NSDateFormatter *df = nil; if (df == nil) { df = [[NSDateFormatter alloc] init]; [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; [df setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; } NSArray* parts = [utcString componentsSeparatedByString:@"."]; NSDate *utcDate = [df dateFromString:parts[0]]; if(parts.count > 1){ double microseconds = [parts[1] doubleValue]; utcDate = [utcDate dateByAddingTimeInterval:microseconds / 1000000]; } return utcDate; } 

现在一个NSString“2011-04-21 03:31:37.310396”将完全解析为NSDate 2011-04-21 03:31:37.310396