「10:10:12」、「12:10:34」、「05:23:11」のような時間文字列の配列があります。その配列、つまり「05:23:11」からless(min)時間を計算し、そこから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];
NSString
最後に、その日付から600秒を引き、それを:に戻すことができます。
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 に答える