setting date format for NSDateFormatter

前端 未结 2 1008
予麋鹿
予麋鹿 2020-12-19 04:29

I am trying to set the date format for something like \"2011-04-21 03:31:37.310396\". I think I\'m not getting the fractional seconds right. I\'m looking at http://unicode.

相关标签:
2条回答
  • 2020-12-19 05:06

    try

    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);
    

    I guess you probably forgot the dot

    0 讨论(0)
  • 2020-12-19 05:27

    As per Zaph's comment in the other answer: the maximum number of S is 3. Any more just produce zeros.

    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
    

    To maintain full microsecond precision try this magic:

    -(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;
    }
    

    Now an NSString "2011-04-21 03:31:37.310396" will parse fully to an NSDate 2011-04-21 03:31:37.310396

    0 讨论(0)
提交回复
热议问题