libro
www.tuyano.com
初心者のためのObjective-Cプログラミング入門

NSDateと日時の扱い (2/6)

作成:2011-02-13 12:13
更新:2011-11-13 21:22

■日時をフォーマットする

日時の値は、NSLog%@を指定してインスタンスを出力すれば、一応日時の値をテキストで書き出すことはできます。が、もっと柔軟に日時の表示を行いたい場合も多いでしょう。このような場合には、NSDateの日時をフォーマットしてテキストとして取り出す「NSDateFormatter」というクラスが用意されています。

このNSDateFormatterの利用法としては、まずインスタンスを作成しておいてから、それに指定のフォーマットスタイルで初期化処理をする、といった形になるでしょう。インスタンスの作成は、クラスからインスタンスを作成するための基本である「alloc」クラスメソッドを使って作成しておきます。
NSDateFormatter *変数 = [NSDateFormatter alloc];
こうして用意されたインスタンスを初期化します。これは、ロケール情報(国別情報)に関するNSLocaleというものを用意するやり方と、直接フォーマットのためのテキストを用意して指定をするやり方などがあります。

まず、簡単な「フォーマットのスタイルを指定する」やり方です。これは以下のような初期化用メソッドを用います。
NSDateFormatter *変数 = [《NSDateFormatter*》
        initWithDateFormat:《NSString*》
        allowNaturalLanguage:《BOOL》];
これで、引数に指定した形式でフォーマットすることができるようになります。allowNaturalLanguage:は自然言語的な表現を許可するかどうかで、これはYESにしておきましょう。こうしてフォーマットしたものは、「stringFromDate:」というメソッドでテキストを取り出すことができます。
NSString* 変数 = [《NSDateFormatter*》 stringFromDate:《NSDate*》];
これで、指定した形式でフォーマットされた日時のテキストを取り出すことができます。例えば、以下のような形で利用するわけですね。
       NSDate* date = [NSDate date];
        NSDateFormatter* fmt = [[NSDateFormatter alloc]
                                initWithDateFormat:@"<%Y><%m><%d>"
                                allowNaturalLanguage:YES];
        NSLog(@"%@",[fmt stringFromDate:date]);
これは、<年><月><日>というような形式で日付を出力します。initWithDateFormat:@"<%Y><%m><%d>" というように引数が指定されていますね? この%Y%m%dというところに、それぞれ年月日の値が嵌めこまれてフォーマットされたわけです。initWithDateFormat:を利用するためには、フォーマットで利用出来る記号類を理解しておく必要があるでしょう。以下にざっと整理しておきましょう。
%y    年(2桁表記)
%Y    年(4桁表記)
%m    月(2桁表記)
%d    日
%H    時(24時間制の値)
%M    分
%S    秒
%F    ミリ秒
%K    時間(12時間制)
%j    1年の経過日数
%a    曜日(省略形)
%A    曜日(フル表記)
%b    月の名前(省略形)
%B    月の名前(フル表記)
%Z    タイムゾーン
%z    時差(GMTとの差)

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※現在の日付を表示する例

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        NSDate* date = [NSDate date];
        NSDateFormatter* fmt = [[NSDateFormatter alloc]
                                initWithDateFormat:@"<%Y><%m><%d>" 
                                allowNaturalLanguage:YES];
        NSLog(@"%@",[fmt stringFromDate:date]);
    }
    return 0;
}
※関連コンテンツ

「初心者のためのObjective-Cプログラミング入門」に戻る