Objective-C Language
NSDate
サーチ…
備考
NSDate
は、非常に単純な値型で、世界時の1つの正確な瞬間を表します。タイムゾーン、夏時間、カレンダー、ロケールに関する情報は含まれていません。
NSDate
は実際にはNSTimeInterval
周りの不変ラッパーで、 double
です。 Foundationには他の値型のように、変更可能なサブクラスはありません。
NSDateの作成
NSDate
クラスは、指定された日付と時刻に対応するNSDate
オブジェクトを作成するためのメソッドを提供します。指定されたイニシャライザを使用してNSDate
を初期化することができます。
2001年1月1日00:00:00 UTCを基準にして秒数で初期化された
NSDate
オブジェクトを返します。
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:100.0];
NSDate
は、現在の日付と時刻に等しいNSDate
を簡単に作成する方法も提供します:
NSDate *now = [NSDate date];
現在の日付と時刻から指定された秒数だけNSDate
を作成することもできます。
NSDate *tenSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:10.0];
日付比較
Objective-CのNSDate
を比較する方法は4つあります。
-
- (BOOL)isEqualToDate:(NSDate *)anotherDate
-
- (NSDate *)earlierDate:(NSDate *)anotherDate
-
- (NSDate *)laterDate:(NSDate *)anotherDate
-
- (NSComparisonResult)compare:(NSDate *)anotherDate
2つの日付、 NSDate date1 = July 7, 2016
NSDate date2 = July 2, 2016
NSDate date1 = July 7, 2016
2日を使用する次の例を考えてみましょう。
NSDateComponents *comps1 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 7;
NSDateComponents *comps2 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 2;
NSDate* date1 = [calendar dateFromComponents:comps1]; //Initialized as July 7, 2016
NSDate* date2 = [calendar dateFromComponents:comps2]; //Initialized as July 2, 2016
NSDate
が作成されたので、それらを比較することができます:
if ([date1 isEqualToDate:date2]) {
//Here it returns false, as both dates are not equal
}
NSDate
クラスのearlierDate:
およびlaterDate:
メソッドを使用することもできます。
NSDate *earlierDate = [date1 earlierDate:date2];//Returns the earlier of 2 dates. Here earlierDate will equal date2.
NSDate *laterDate = [date1 laterDate:date2];//Returns the later of 2 dates. Here laterDate will equal date1.
最後に、 NSDate
のcompare:
メソッドを使用することができます:
NSComparisonResult result = [date1 compare:date2];
if (result == NSOrderedAscending) {
//Fails
//Comes here if date1 is earlier than date2. In our case it will not come here.
}else if (result == NSOrderedSame){
//Fails
//Comes here if date1 is the same as date2. In our case it will not come here.
}else{//NSOrderedDescending
//Succeeds
//Comes here if date1 is later than date2. In our case it will come here
}
時と分(のみ)から完全なNSDateに構成されたNSDateを変換する
時と分のフォーマット、つまり08:12からNSDateを作成したケースはたくさんあります。
この状況の欠点は、あなたのNSDateがほぼ完全に "裸"であることと、このオブジェクトが他のNSDateタイプと "一緒に遊ぶ"ために、日、月、年、秒、およびタイムゾーンを作成することです。
この例では、hourAndMinuteは時および分形式で構成されたNSDate型です。
NSDateComponents *hourAndMintuteComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute
fromDate:hourAndMinute];
NSDateComponents *componentsOfDate = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
fromDate:[NSDate date]];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay: componentsOfDate.day];
[components setMonth: componentsOfDate.month];
[components setYear: componentsOfDate.year];
[components setHour: [hourAndMintuteComponents hour]];
[components setMinute: [hourAndMintuteComponents minute]];
[components setSecond: 0];
[calendar setTimeZone: [NSTimeZone defaultTimeZone]];
NSDate *yourFullNSDateObject = [calendar dateFromComponents:components];
今あなたのオブジェクトは「裸」になっているのとは全く反対のものです。
NSDateをNSStringに変換する
wwがNSDateオブジェクトを持っていて、それをNSStringに変換したい場合さまざまなタイプの日付文字列があります。私たちはそれをどのようにすることができますか?それはとても簡単です。ちょうど3つのステップ。
- NSDateFormatterオブジェクトの作成
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- 文字列が必要な日付形式を設定します。
dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
さて、フォーマットされた文字列を取得する
NSDate *date = [NSDate date]; // your NSDate object NSString *dateString = [dateFormatter stringFromDate:date];
これにより、次のような出力が得られます2001-01-02 at 13:00
注意:
NSDateFormatter
インスタンスの作成はコストのかかる操作なので、一度作成して可能な限り再利用することをお勧めします。