我正在尝试设置“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];
帮助?
答案 0 :(得分:23)
试
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);
我猜你可能忘记了点
答案 1 :(得分:5)
根据Zaph在另一个答案中的评论:S的最大数量是3.再生产零。
E.g。
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