我有时间字符串数组,如“10:10:12”,“12:10:34”,“05:23:11”这个。我想计算该阵列的较少(最小)时间,即“05:23:11”并从中减去10分钟。并以相同的格式保存结果。如果有人知道如何帮助我,请。我会感激他/她。预先感谢。
答案 0 :(得分: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];
这比其他解决方案简单得多,因为您不必提出自己的排序算法。
希望这有帮助。
答案 1 :(得分: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分钟
答案 2 :(得分: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];
我希望它有所帮助。