2

我有一个字符串2000-01-01T10:00:00Z ,我想从该字符串中提取时间:10:00

谁能告诉我如何使用 NSRegularExpression

我尝试了以下代码,但它不起作用(不返回任何结果)

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(\d{2}:\d{2})" options:NSRegularExpressionCaseInsensitive error:NULL];
NSString *newSearchString = [regex firstMatchInString:opening_time options:0 range:NSMakeRange(0, [opening_time length])];

opening_time在哪里"2000-01-01T10:00:00Z"

4

3 回答 3

10

我认为您需要将\ds 前面的斜杠加倍:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(\\d{2}:\\d{2})" options:NSRegularExpressionCaseInsensitive error:NULL];
NSTextCheckingResult *newSearchString = [regex firstMatchInString:opening_time options:0 range:NSMakeRange(0, [opening_time length])];
NSString *substr = [opening_time substringWithRange:newSearchString.range];
NSLog(@"%@", substr);

这打印10:00

于 2012-10-23T03:34:30.933 回答
2

使用NSDateFormatter. 看起来您可能是从 Rails Web 服务获得这个日期的?试试这个:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss'Z'"];

NSDate *date = [dateFormatter dateFromString:opening_time];

NSDateComponents *components = [[NSCalendar currentCalendar] 
                          components:kCFCalendarUnitHour fromDate:date];

NSInteger hour = [components hour]

// Hour should now contain 10 with your sample date

如果您想获取任何其他组件,请更改您的 components 参数,为您要提取的组件添加标志。像这样的东西

NSDateComponents *components = [[NSCalendar currentCalendar] 
                          components:kCFCalendarUnitHour | kCFCalendarUnitMinute 
                            fromDate:date];

NSInteger hour = [components hour];
NSInteger minute = [components minute];
于 2012-10-23T05:25:38.123 回答
0

如果你真正想要的是这个固定格式字符串的 10:00 部分,为什么不避免使用正则表达式并简单地获取子字符串:

NSString *timeStr = [opening_time substringWithRange:NSMakeRange(11, 5)];

当然,您可以考虑使用具有指定格式的NSDateFormatter将字符串解析为NSDate 。确保日期格式化程序的语言环境设置为en_US_POSIX,因为它是固定格式而不是以用户为中心的。

您采取的方法取决于您将如何处理提取的时间。如果您想向用户显示它,那么您需要使用 NSDateFormatter 以便您可以根据用户的语言环境正确格式化它。

于 2012-10-23T03:49:32.640 回答