如何使用componentsSeparatedByCharactersInSet将HH:MM:SS拆分为NSArray

时间:2013-09-06 06:47:25

标签: ios objective-c date

像这样NSString @"2013-09-02 0:00:00 +0800"我可以使用componentsSeparatedByCharactersInSet方法将其拆分为NSArray。

Array看起来像这样

@["2013-09-02", "0:00:00", "+0800"].

但是如何将NSString @"0:00:00"拆分为NSArray看起来像

@[@"0", "00", "00"]  在Objective-C中使用`

componentsSeparatedByCharactersInSet方法?

3 个答案:

答案 0 :(得分:3)

NSString *originalValue =  @"2013-09-02 0:00:00 +0800";

// First seperated by white space
NSArray *spaceSeperated= [string componentsSeparatedByString:@" "]; // result would be @[@"2013-09-02", @"0:00:00", @"+0800"]

// now for time string seperate that one by :
NSArray *timeSeperated = [[spaceSeperated objectAtIndex:1] componentsSeparatedByString:@":"]; 

现在, timeSeperate 数组将在3个单独的对象中包含时间值: @ [@“0”,@“00”,@“00”]

答案 1 :(得分:2)

如果您想知道某个日期的小时,分​​钟和秒,您应该先使用NSDateFormatter,然后使用NSDateComponents提取这些属性。

NSString *yourString = @"2013-09-02 0:00:00 +0800";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd.MM.yyyy HH:mm:ss ZZZZ"];
NSDate *date = [dateFormatter dateFromString:yourString];

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:date];
NSInteger hour = components.hour;
NSInteger minute = components.minute;
NSInteger second = components.second;

//Alternative (NSArray can only contain objects - NSNumber vs. NSInteger)
NSArray *yourArray = @[[NSNumber numberWithInteger:components.hour],
                       [NSNumber numberWithInteger:components.minute],
                       [NSNumber numberWithInteger:components.second]];`

看起来似乎更多的代码,但它是更清洁的解决方案。请记住,创建NSDateFormatter的成本相对较高。如果你能做到这一点,你应该在循环之外创建它(虽然它不是线程安全的);

答案 2 :(得分:0)

您必须使用componentsSeparatedByString:@":"方法。