How to parse ISO 8601 using NSDateFormatter with optional milliseconds part

后端 未结 3 1938
耶瑟儿~
耶瑟儿~ 2020-12-03 11:09

I\'m trying to use an NSDateFormatter to parse dates that are in either of these formats

@\"2013-02-01T14:21:00\"

or

@\"201         


        
3条回答
  •  醉话见心
    2020-12-03 11:34

    I wrote an universal parser which dropped milliseconds part.

    @implementation JSONModel(NSPAdditions)
    
    - (NSDate *)NSDateFromNSString:(NSString*)string {
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
        NSArray* parts = [string componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@" T"]];
        if ([parts count] <= 1) {
            return [formatter dateFromString:string];
        }
        NSString *part0 = parts[0];
        NSAssert([part0 length] == [@"yyyy-MM-dd" length], @"Date format error");
        NSString *part1 = parts[1];
        if ([part1 length] > [@"HH:mm:ss" length]) {
            part1 = [part1 substringToIndex:[@"HH:mm:ss" length]];
        }
        NSString *fmted = [NSString stringWithFormat:@"%@ %@", part0, part1];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        return [formatter dateFromString:fmted];
    }
    
    @end
    

提交回复
热议问题