2010年5月5日水曜日

日付を扱うクラス

日付を扱うクラスについて調べてみました。

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 件のコメント:

コメントを投稿