日付を扱うクラスについて調べてみました。
iPhoneでは日付を扱う時に「NSDate」というものを使うようです。
「NSDate」はグレゴリオ暦2001/1/1 0:0:0からの経過秒数を扱うクラスだそうです。
世界標準時のみ扱うので、日本国内の日付を扱うには、「NSDateComponents」というクラスを使います。
こちらはグレゴリオ暦ではなく、「年/月/日 時:分:秒 曜日」を扱います。
そして、「NSDate」(世界標準時)から「NSDateComponents」(世界標準時及びローカル日付)へ変換するクラスとして、「NSCalendar」クラスを使います。
「NSCalendar」クラスはタイムゾーンを考慮して日付変換を行ってくれますが、このタイムゾーンを内部でインスタンスとして持っているそうです。
タイムゾーンは「NSTimeZone」というクラス名です。
「NSCalendar」はデフォルトではiPhone OSのシステム設定で設定されているタイムゾーンを使用するようです。
// 現在日時(世界標準時)を取得
NSDate* dt = [NSDate date];
// システム情報で設定されているタイムゾーンでカレンダーを取得
NSCalendar* cal = [NSCalendar currentCalendar];
// 取得したい情報をカレンダーのフラグに指定
NSUInteger flg = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
| NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit;
// ローカル日時(システム情報設定のタイムゾーン)を取得
NSDateComponents* localTime = [cal components:flg fromDate:dt];
OSに設定されたタイムゾーンとは別のタイムゾーンの時刻を設定するには、以下のようにNSCalendarに取得したいタイムゾーンを指定します。
// 世界標準時のタイムゾーンを取得
NSTimeZone* worldZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
// カレンダーにタイムゾーンを設定
[cal setTimeZone:worldZone];
// 世界標準時を取得
NSDateComponents* worldTime = [cal components:flg fromDate:dt];
0 件のコメント:
コメントを投稿