NSDate から年月や日時を取り出す - Objective-C プログラミング
PROGRAM
NSDate から年月や日時を取り出す
NSDate 型のデータ型は、NSCalendar を使用することで、年・月・日や、曜日、時・分・秒、タイムゾーンなどの情報を NSDateComponents 型で取り出すことができます。
例えば NSDate 型の変数 date から、年と月を取得したい場合は、次のようにします。
// NSCalendar を取得します。
NSCalendar* calendar = [NSCalendar currentCalendar];
// 取得したい要素(今回は年と月)を表すフラグを添えて、日付からその情報を持った NSDateComponents を取得します。
NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit fromDate:date];
// これで、NSDateComponents から、年や月を取得することが可能です。
NSInteger year = components.year;
NSInteger month = components.month;
NSDateComponents には、他にも month や hour、weekday などの値も用意されていますが、これらを使用するには、適切なフラグを指定して components:fromDate: メソッドを呼び出しておく必要があります。
なお、このメソッドで指定できるフラグは、次のようなものがあります。
NSYearCalendarUnit | year | 年を取得します。 |
---|---|---|
NSMonthCalendarUnit | month | 月を取得します。月は 1 から 12 までの番号です。 |
NSDayCalendarUnit | day | 日を取得します。 |
NSHourCalendarUnit | hour | 時を取得します。 |
NSMinuteCalendarUnit | minute | 分を取得します。 |
NSSecondCalendarUnit | second | 秒を取得します。 |
NSWeekCalendarUnit | week | 1 年の中で、何週目に位置するかを取得できるようですが、iOS 5.0 で非推奨になっていました。iOS 5 以降では NSWeekOfMonthCalendarUnit を使うのが良さそうです。 |
NSWeekdayCalendarUnit | weekday | 曜日を取得します。曜日は、日曜日が 1、月曜日が 2、と続いて、土曜日が 7 になります。 |
NSWeekdayOrdinalCalendarUnit | weekdayOrdinal | この日の曜日が、月の中で、何週目のその曜日であるかを取得します。1 から始まる値で取得できます。 |
NSQuarterCalendarUnit | quarter | 第何四半期にあたるかどうかを取得できるそうですが、とりあえず 2012 年 6 月 23 日で 0 が取得されました。 |
NSWeekOfMonthCalendarUnit | weekOfMonth | この月の中で、何週目に当たるかどうかを取得します。1 から始まる値で取得できます。 |
NSWeekOfYearCalendarUnit | weekOfYear | 1 年の中で、何週目に位置するかを取得します。1 から始まる値で取得できます。 |
NSYearForWeekOfYearCalendarUnit | yearForWeekOfYear | NSWeekOfYearCalendarUnit を計算するのに使った年(2012 など)を取得できるようです。 |
NSCalendarCalendarUnit | calendar | このコンポーネントを取得するのに使用したカレンダーのインスタンスが取得できるようです。 |
NSTimeZoneCalendarUnit | timeZone | このコンポーネントが表す日付のタイムゾーンです。"Asia/Tokyo (JST) offset 32400" を表す NSTimeZone 型の値を取得できます。 |
NSEraCalendarUnit | era | 紀元前か紀元後かといった時代を表す値だそうです。とりあえず 1 が取得できるようでした。 |
これらのフラグを "|" 記号で連結すれば、それらの内容を NSDateComponents に取り出すことができます。
[ もどる ]