操纵objective-c中的字符串以删除两个字符之间的子字符串

操纵objective-c中的字符串以删除两个字符之间的子字符串,objective-c,nsstring,iso8601,Objective C,Nsstring,Iso8601,我想解析从web服务接收的日期字符串。然而,我有时会收到带有小数部分的日期,有时则没有小数部分。此外,有时日期的小数位数不同 假设您有以下日期: NSString *dateString = @"2013-07-22T220713.9911317-0400"; 如何删除十进制值?我想以以下方式结束: @"2013-07-22T220713-0400"; 因此,我可以使用不使用小数的DateFormatter来处理它。您可以使用正则表达式来匹配第一次出现的小数,然后再匹配数字,并删除它们:

我想解析从web服务接收的日期字符串。然而,我有时会收到带有小数部分的日期,有时则没有小数部分。此外,有时日期的小数位数不同

假设您有以下日期:

NSString *dateString = @"2013-07-22T220713.9911317-0400";
如何删除十进制值?我想以以下方式结束:

 @"2013-07-22T220713-0400";

因此,我可以使用不使用小数的DateFormatter来处理它。

您可以使用正则表达式来匹配第一次出现的小数,然后再匹配数字,并删除它们:

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:@""];

根据@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。

这应该可以帮你做到:你为什么需要这样做?如果您用字符串初始化了NSDate对象,它应该可以正常工作。