设置NSDateFormatter的日期格式

Joe*_*oey 8 date nsdateformatter ios

我正在尝试设置类似"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];    
Run Code Online (Sandbox Code Playgroud)

救命?

sup*_*ndr 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);
Run Code Online (Sandbox Code Playgroud)

我想你可能忘记了这个点

  • 虽然这似乎有用,但是`NSDateFormatter`输出仅限于mili-seconds.任何超过3的"S"格式字符都将产生"0".这同样适用于创建日期.示例的时间间隔产生:"325063897.310000".所以这可能实际上没有回答这个问题,因为失去了396微秒.(在OSX上测试,而不是iPhone) (6认同)

mal*_*hal 5

根据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
Run Code Online (Sandbox Code Playgroud)

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

-(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;
}
Run Code Online (Sandbox Code Playgroud)

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