如何将一个时间值的NSString表示转换成两个包含小时和分钟的NSInteger?

我深入iOS开发和Objective C语言,并构build一个闹钟应用程序,以熟悉SDK和语言。 我有一个NSString对象表示一个时间,范围从"1:00 am""12:59 am" "1:00 am" "12:59 am" 。 我需要将这个NSString转换为两个包含小时值和分值的NSInteger 。 正如我这样做,我发现我正在做的NSString操作是非常费力,它只是感觉像sl code的代码。

有一个简单的方法来提取时间值的NSString表示的小时和分钟字符,并将其数值存储在两个NSInteger的?

在此先感谢您的帮助! 我要回去了…

 NSScanner* timeScanner=[NSScanner scannerWithString:...the time string...]; int hours,minutes; [timeScanner scanInt:&hours]; [timeScanner scanString:@":" intoString:nil]; //jump over : [timeScanner scanInt:&minutes]; NSLog(@"hours:%d minutes:%d",hours,minutes); 
  1. 使用NSDateFormatter将您的string转换为NSDate
  2. 使用[NSCalendar currentCalendar] 提取各种date组件 (如小时,分钟等)。

换一种说法:

 NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"h:ma"]; NSDate *date = [formatter dateFromString:@"12:59 pm"]; [formatter release]; NSDateComponents * components = [[NSCalendar currentCalendar] components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:date]; NSLog(@"hour: %d", [components hour]); NSLog(@"minute: %d", [components minute]); 

就我所知,这是官方的方式。 这不是很漂亮:

 NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc]init] autorelease]; [dateFormatter setDateFormat:@"h:ma"]; NSDate *date = [dateFormatter dateFromString:@"12:34 am"]; [dateFormatter setDateFormat:@"h"]; NSString *hours = [dateFormatter stringFromDate:date]; [dateFormatter setDateFormat:@"m"]; NSString *minutes = [dateFormatter stringFromDate:date]; 

但是这样做的string摆弄的方式(寻找: ,寻找空间,…),可能会给你长期的头痛。

 NSString *time = @"1:00 am"; NSString *removeam = [time stringByReplacingOccurencesOfString:@" am" withString:@""]; SString *removepm = [removeam stringByReplacingOccurencesOfString:@" pm" withString:@""]; NSArray *timeArray = [removepm componentsSeparatedByString:@":"]; NSInteger *hour = [[timeArray objectAtIndex:0] intValue]; NSInteger *mins = [[timeArray objectAtIndex:1] intValue]; 

如果你正在构build一个闹钟应用程序,你可能会想看看NSDateNSDateFormatter类,而不是试图把所有的string分离成整数types。 此外,你的时间范围有点奇怪(也许是一个错字?) – 你不想24小时都可用?

获取时间间隔并写入

 duration.text = [NSString stringWithFormat:@"%d:%02d", (int)audioPlayer.duration / 60, (int)audioPlayer.duration % 60, nil];