【问题标题】:Manipulate string in objective-c to remove substring between 2 characters在objective-c中操作字符串以删除2个字符之间的子字符串
【发布时间】:2013-07-29 00:25:14
【问题描述】:

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

假设您得到以下日期:

NSString *dateString = @"2013-07-22T220713.9911317-0400";

如何删除十进制值?我想结束:

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

所以我可以使用不使用小数的 DateFormatter 来处理它。

【问题讨论】:

标签: objective-c nsstring iso8601


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-07-23
      • 1970-01-01
      • 2012-05-14
      • 2015-02-10
      • 1970-01-01
      • 2010-12-25
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多