NSDateオブジェクトが2つあり、その2つの差が結果としてNSDateオブジェクトになるようにします。これを達成する方法はありますか?
ここでは、経過時間を見つけてから経過時間をローカライズするという独特の問題に対処しようとしています。 NSDateオブジェクトに経過時間があれば、ローカライズできます。 NSDateFormatterを使用してローカライズできるように、2つの日付間の時間間隔と同じ時間コンポーネントを持つNSDateオブジェクトを作成することを考えました。
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);
2002年5月5日から2001年12月12日を減算すると、日付はどうなりますか? 2つの日付間の時系列距離は日付にはできません。常に何らかの間隔です。 timeIntervalSinceDate: を使用して間隔を計算できます。
ローカライズするには、次の手順を試してください。
DateFromComponentsで NSCalendar を使用できます: NSDateComponents を渡します。
TimeIntervalを NSDateComponents に分解するには NSTimeIntervalをiPhoneで年、月、日、時間、分、秒に分解するにはどうすればよいですか? 。
最後に NSDateFormatter および initWithDateFormat:allowNaturalLanguage: を使用して、ローカライズされた文字列を取得します。 日付形式文字列構文 は、さまざまなプレースホルダーを示します。
NSDate
クラス参照から、これらを実行するインスタンスメソッドがあります-
isEqualToDate:
timeIntervalSinceDate:
NSDate
のtimeIntervalSinceDate:
を使用して2つの日付間の時間間隔を計算できますが、時間間隔を日付として表すことは意味がありません。
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");