我有像“10:10:12”、“12:10:34”、“05:23:11”这样的时间字符串数组。我想计算该数组的更少(分钟)时间,即“05:23:11”并从中减去10分钟。并以相同的格式保存结果。如果有人知道该怎么做,请帮助我。我会感激他/她。预先感谢。
问问题
432 次
3 回答
2
首先,按升序排列字符串。如果您的字符串数组被调用arrayOfTimeStrings
,那么您可以获得一个正确排序的数组,如下所示:
NSArray *array = [arrayOfTimeStrings sortedArrayUsingSelector:@selector(compare:)];
接下来,只需抓住第一项:
NSString *firstTimeString = (NSString *)[array objectAtIndex:0];
现在,您可以将其转换为NSDate
这样的:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm:ss"];
NSDate *dateFromFirstString = [formatter dateFromString:firstTimeString];
最后,我们可以从该日期减去 600 秒并将其转换回NSString
:
NSDate *tenMinutesBeforeDate = [NSDate dateWithTimeInterval:-600 sinceDate:dateFromFirstString];
NSString *tenMinutesBeforeString = [formatter stringFromDate:tenMinutesBeforeDate];
这将比其他解决方案简单得多,因为您不必提出自己的排序算法。
希望这可以帮助。
于 2012-06-05T15:06:38.497 回答
1
如果您的日期数组很大,您可以这样做:
NSArray * arrayWithTime = [NSArray array];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm:ss"];
NSSortDescriptor *d = [[NSSortDescriptor alloc] initWithKey:nil ascending:YES comparator:^NSComparisonResult(id obj1,id obj2){
NSDate *date1 = [dateFormatter dateFromString:obj1];
NSDate *date2 = [dateFormatter dateFromString:obj2];
return [date1 compare:date2];} ];
NSArray * comparators = [NSArray arrayWithObject:d];
NSArray * final = [arrayWithTime sortedArrayUsingDescriptors:comparators];
然后只取最终数组中的第一项并减去 10 分钟
于 2012-06-05T15:11:59.340 回答
0
有很多方法可以做到,首先想到的是:
NSString *strDate1 = @"10:10:12";
NSString *strDate2 = @"05:23:11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm:ss"];
NSDate *date1 = [dateFormatter dateFromString:strDate1];
NSDate *date2 = [dateFormatter dateFromString:strDate2];
//to compare dates
if([date1 compare:date2] == NSOrderedAscending)
{
//do what you want
}
//to subtract 10 min form a date
NSDate *date3 = [date2 dateByAddingTimeInterval:-60*10];
我希望它有所帮助。
于 2012-06-05T15:01:35.923 回答