Как я могу преобразовать представление NSString значения времени в два NSInteger, содержащие часы и минуты? - PullRequest
1 голос
/ 08 августа 2010

Я углубляюсь в разработку iOS и язык Objective C и создаю приложение с будильником, чтобы ознакомиться с SDK и языком.У меня есть NSString объект, который представляет время, в диапазоне от "1:00 am" до "12:59 am".Мне нужно конвертировать NSString в два NSInteger, которые содержат значение часа и значение минуты.Делая это, я нахожу манипуляции NSString, которые я делаю, чрезвычайно трудоемкими, и это похоже на неаккуратный код.

Есть ли простой способ извлечь символы часа и минуты из NSString представления значения времени и сохранить их числовые значения в двух NSInteger?

Заранее спасибоза всю вашу помощь!Я вернусь к этому ...

Ответы [ 6 ]

6 голосов
/ 08 августа 2010
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);
3 голосов
/ 08 августа 2010
  1. Используйте NSDateFormatter для преобразования вашей строки в NSDate.
  2. Используйте [NSCalendar currentCalendar] в извлечение различные компоненты даты (например, часы, минуты и т. Д.).

Другими словами:

NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"h:m a"];
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]);
2 голосов
/ 08 августа 2010
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];
2 голосов
/ 08 августа 2010

Это официальный путь, насколько я знаю.Это не очень красиво:

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc]init] autorelease];
[dateFormatter setDateFormat:@"h:m a"];
NSDate *date = [dateFormatter dateFromString:@"12:34 am"];

[dateFormatter setDateFormat:@"h"];
NSString *hours = [dateFormatter stringFromDate:date];

[dateFormatter setDateFormat:@"m"];
NSString *minutes = [dateFormatter stringFromDate:date];

НО, как это делать (не обращая внимания на :, ищите пробел, ...), может привести к еще большей головной боли в долгосрочной перспективе.

1 голос
/ 16 июля 2013

получите интервал времени и запишите его как

duration.text = [NSString stringWithFormat:@"%d:%02d", (int)audioPlayer.duration / 60, (int)audioPlayer.duration % 60, nil];
1 голос
/ 08 августа 2010

Если вы создаете приложение для будильника, вы, вероятно, захотите изучить классы NSDate и NSDateFormatter, вместо того, чтобы пытаться вытянуть все эти строкиразделить на целочисленные типы.Кроме того, ваш временной диапазон немного странный (возможно, опечатка?) - разве вы не хотите, чтобы все 24 часа были доступны?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...