1

我有像“10:10:12”、“12:10:34”、“05:23:11”这样的时间字符串数组。我想计算该数组的更少(分钟)时间,即“05:23:11”并从中减去10分钟。并以相同的格式保存结果。如果有人知道该怎么做,请帮助我。我会感激他/她。预先感谢。

4

3 回答 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 回答