如何将一个时间值的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);
- 使用
NSDateFormatter
将您的string转换为NSDate
。 - 使用
[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一个闹钟应用程序,你可能会想看看NSDate
和NSDateFormatter
类,而不是试图把所有的string分离成整数types。 此外,你的时间范围有点奇怪(也许是一个错字?) – 你不想24小时都可用?
获取时间间隔并写入
duration.text = [NSString stringWithFormat:@"%d:%02d", (int)audioPlayer.duration / 60, (int)audioPlayer.duration % 60, nil];