我想解析从Web服务收到的日期字符串。但是,我有时会收到十进制组件的日期,有时没有十进制组件。此外,有时日期会有不同的十进制数字。
假设您有以下日期:
NSString *dateString = @"2013-07-22T220713.9911317-0400";
如何删除小数值?我想最终得到:
@"2013-07-22T220713-0400";
所以我可以使用不使用小数的DateFormatter处理它。
答案 0 :(得分:0)
您可以使用正则表达式匹配小数后跟数字的第一个匹配项,并将其删除:
NSString *dateString = @"2013-07-22T220713.9911317-0400";
NSRegularExpression * regExp = [NSRegularExpression regularExpressionWithPattern:@"\\.[0-9]*" options:kNilOptions error:nil];
dateString = [dateString stringByReplacingCharactersInRange:[regExp rangeOfFirstMatchInString:dateString options:kNilOptions range:(NSRange){0, dateString.length}] withString:@""];
答案 1 :(得分:0)
根据@JeffCompton的建议,我最终做到了这一点:
+ (NSDate *)dateFromISO8601:(NSString *)dateString {
if (!dateString) return nil;
if ([dateString hasSuffix:@"Z"]) {
dateString = [[dateString substringToIndex:(dateString.length - 1)] stringByAppendingString:@"-0000"];
}
NSString *cleanDateString = dateString;
NSArray *dateComponents = [dateString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"."]];
if ([dateComponents count] > 1){
NSArray *timezoneComponents = [[dateComponents objectAtIndex:1] componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"-"]];
if ([timezoneComponents count] > 1){
cleanDateString = [NSString stringWithFormat:@"%@-%@", [dateComponents objectAtIndex:0], [timezoneComponents objectAtIndex:1]];
}
}
dateString = [cleanDateString stringByReplacingOccurrencesOfString:@":" withString:@""];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-d'T'HHmmssZZZ";
NSDate *resultDate = [dateFormatter dateFromString:dateString];
return resultDate;
}
这是对一些开源代码的修改,但我丢失了对原始代码的引用。
所有修改的原因是我连接的API可以给我带小数或不带小数的日期,有时没有:分隔HH,mm和ss。