web-dev-qa-db-ja.com

2つのNSDateオブジェクトの違い-結果もNSDate

NSDateオブジェクトが2つあり、その2つの差が結果としてNSDateオブジェクトになるようにします。これを達成する方法はありますか?

ここでは、経過時間を見つけてから経過時間をローカライズするという独特の問題に対処しようとしています。 NSDateオブジェクトに経過時間があれば、ローカライズできます。 NSDateFormatterを使用してローカライズできるように、2つの日付間の時間間隔と同じ時間コンポーネントを持つNSDateオブジェクトを作成することを考えました。

53
Abhinav

NSDateは時間のインスタンスを表します。したがって、時間の間隔NSDateとして表すことは意味がありません。欲しいのはNSDateComponents

NSDate *dateA;
NSDate *dateB;

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay
                                           fromDate:dateA
                                             toDate:dateB
                                            options:0];

NSLog(@"Difference in date components: %i/%i/%i", components.day, components.month, components.year);
151
Nick Forge

2002年5月5日から2001年12月12日を減算すると、日付はどうなりますか? 2つの日付間の時系列距離は日付にはできません。常に何らかの間隔です。 timeIntervalSinceDate: を使用して間隔を計算できます。

ローカライズするには、次の手順を試してください。

18
Nick Weaver

NSDateクラス参照から、これらを実行するインスタンスメソッドがあります-

  1. 2つのNSDate変数を比較する方法は? Ans:isEqualToDate:
  2. 2つのNSDate変数の違いを見つける方法は? Ans:timeIntervalSinceDate:
  3. NSDate変数から分、時間、日の各個別の値を取得する方法は? リンク
7
Jhaliya

NSDatetimeIntervalSinceDate:を使用して2つの日付間の時間間隔を計算できますが、時間間隔を日付として表すことは意味がありません。

4
Chris Doble

NSDateの-compare:を使用する簡単な方法があります。

NSDate *dateA = [NSDate dateWithTimeIntervalSinceNow:100];
NSDate *dateB = [NSDate dateWithTimeIntervalSinceNow:200];
NSDate *myDate = [NSDate dateWithTimeIntervalSinceNow:150];
NSArray *dateArray = [NSArray arrayWithObjects:dateA, dateB, myDate, nil];
NSArray *sortedArray = [dateArray sortedArrayUsingSelector:@selector(compare:)];
if ([myDate isEqualToDate:[sortedArray objectAtIndex:1]])
    NSLog(@"myDatea between dateA and dateB");
3
neal