比较字符串中的时间并从iphone中减去10分钟?

时间:2012-06-05 14:37:07

标签: iphone nsdate nsdateformatter

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

3 个答案:

答案 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];

我希望它有所帮助。