2012-06-05 50 views
1

我有像「10:10:12」,「12:10:34」,「05:23:11」這樣的時間字符串數組。我想計算一下數組(即「05:23:11」)的較少(最小)時間,並從中減去10分鐘。並以相同的格式保存結果。如果有人知道如何做到這一點,請幫助我。我會感激他/她。預先感謝。在字符串中比較時間並從iPhone中減去10分鐘?

回答

1

如果使用日期的陣列是大U可以做到這一點llike這一點:

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分鐘

+0

我不知道,如果是OP明確如何減去那十分鐘... – aopsfan

+0

它適用於我。我拿第一個元素,然後使用aopsfan邏輯,從那個時間元素減去10分鐘。謝謝大家。 – python

+0

@python我的解決方案比這更清潔,因爲它在一行中完成了所有操作。你並不需要一個排序描述符,讓'@selector(compare:)'來爲你工作。 – aopsfan

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

我希望它能幫助。

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

這會比其他解決方案簡單得多,因爲您不必提出自己的排序算法。

希望這會有所幫助。