*

objective-cで現在日をYYYY/MM/DDの文字列に変換する方法

   

N695_biggubenn500

現在日時を表示したいってことはよくありますよね。

しかも、それを2013/12/01 10:10:10と、決まったフォーマットで表示させたい事はよくあると思います。

現在日時を取得するには?

objective-cで時間を取得したい場合、NSDateを使います。

// 現在時刻を取得
NSDate* now = [NSDate date];

//ログ出力
NSLog(@"%@",[NSDate date]);
<出力結果>
2013-11-15 23:00:47 +0000
これで現在日は取得出来ました。

取得した日付を指定のフォーマットで表示するには?

NSDateFormatterクラスを使います。

例えば、YYYY/MM/DD HH:MM:SS (例:2013/01/01 12:01:01)のようなフォーマットでNSStringの文字列にしたい場合、以下のようにします。

//NSDateFormatterクラスを出力する。
NSDateFormatter *format = [[NSDateFormatter alloc] init];

//Localeを指定。ここでは日本を設定。
[format setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]];

//出力形式を文字列で指定する。
[format setDateFormat:@"yyyy/MM/dd HH:mm:ss"];

// 現在時刻を取得しつつ、NSDateFormatterクラスをかませて、文字列を出力する。
NSString *StTime = [format stringFromDate:[NSDate date]]; NSLog(@"%f",StTime);

<出力結果>
2013/11/16 08:19:42

フォーマット形式についてはいかのサイトさんを見るとわかりやすいです。

iPhoneの設定が和暦だった場合は?

以下のサイトさんを参照

和暦設定の場合はどうも日付がおかしくなるようですね。
さらに世界中で使用することを想定した場合、暦は他にもいっぱいあるようです。

そうなると、人によっては変な表示になりかねませんね。
私の場合は上記サイト様のように、暦をグレゴリオ暦に固定させました。
//NSDateFormatterクラスを出力する。
NSDateFormatter *format = [[NSDateFormatter alloc] init];

//NSCalenderクラスをグレゴリオ暦で作成
NSCalendar *gcalendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

//NSDateFormatterクラスにグレゴリオ暦で出すように設定する。
[format setCalendar:gcalendar];
//Localeを指定。ここでは日本を設定。
[format setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]];

//出力形式を文字列で指定する。
[format setDateFormat:@"yyyy/MM/dd HH:mm:ss"];

// 現在時刻を取得しつつ、NSDateFormatterクラスをかませて、文字列を出力する。
NSString *StTime = [format stringFromDate:[NSDate date]]; NSLog(@"%f",StTime);

日付は時間差や暦等あるので、世界を意識すると混乱しますね。。。

 - objective-c, アプリ , ,