[英]Convert HH:MM NSString to NSInteger with minutes
我有几个包含持续时间的NSStrings
,它们看起来像这样: @"03:40", @"08:40"
-时间是动作的持续时间。 我希望每个分钟都有一个int
,说“ 01:20”是“ 80”(分钟),以便以后将它们相互比较。
您如何在Objective-C中管理这个简单的事情? 提前致谢
编辑:
试过这个,无济于事。 我想要一种完全不同的方法,轻松而轻松。
- (NSMutableArray *)sortResultsByTime
{
NSMutableArray *sortedTrips = [NSMutableArray arrayWithArray:[_tweets sortedArrayUsingComparator: ^(id trip1, id trip2) {
double time1 = [self durationFromString:[(Tweet *) trip1 flightDuration]];
double time2 = [self durationFromString:[(Tweet *) trip1 flightDuration]];
NSLog(@"What's time1? It's %f", time1);
NSLog(@"What's time2? It's %f", time2);
if (time1 < time2) {
return (NSComparisonResult)NSOrderedDescending;
}
if (time1 > time2) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}]];
return sortedTrips;
}
- (double)durationFromString:(NSString *)durationString
{
NSArray *durationArray = [durationString componentsSeparatedByString:@":"];
return [durationArray[0] doubleValue] + [durationArray[1] doubleValue] / 60.0;
}
您发布的代码试图将字符串转换为小时数,而不是分钟数。
你要:
return [durationArray[0] doubleValue] * 60 + [durationArray[1] doubleValue];
编辑:原始代码失败,因为此行:
double time2 = [self durationFromString:[(Tweet *) trip1 flightDuration]];
需要是:
double time2 = [self durationFromString:[(Tweet *) trip2 flightDuration]];
更新:由于OP希望采用不同的方法,为什么不简单地这样做:
NSString *time1 = [(Tweet *) trip1 flightDuration];
NSString *time2 = [(Tweet *) trip2 flightDuration];
return [time1 compare:time2];
分割为:
使用-[NSString componentsSeparatedByString:]
),访问每个元素(使用-[NSArray objectAtIndex:
,然后转换为整数( -[NSString intValue]
),最后相乘并相加。
我不明白为什么您认为其他答案过于复杂,但是如果您想要一个没有数组的解决方案,您可以:
- (double)durationFromString:(NSString *)s
{
int hr = 0, min = 0;
NSScanner *scn = [NSScanner scannerWithString:s];
[scn scanInt:&hr];
[scn scanString:@":" intoString:NULL];
[scn scanInt:&min];
return hr * 60 + min;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.