[iOS]NSDateFormatterを使って現在の時間を24時間表記の文字列で欲しい

NSDateFormatter を使って現在の時間を 24時間表記の文字列で欲しいと思った。

で、こんなコードにしてみた。

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
[formatter setDateFormat:@"HH mm ss"];
NSString *todayString = [formatter stringFromDate:[NSDate date]];


普段、自分の iPhone は「設定」-「一般」-「日付と時刻」の「24時間表示」を「オン」にして使っているので、上記のコードで返ってきたのは例えば 12時34分56秒なら「12 34 56」という文字列。

だけど、この「24時間表示」を「オフ」にしてると返ってくるのは「午後00 34 56」という文字列! ビックリ!

え~?大文字の H は 24時間表記だよね???
2015-01-31 14:01 コメント
已邀请:
0

iQi - 面白いアプリを開発中

{ 賛成 }:

NSDateで「午前/午後」表示させない

NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy/MM/dd HH:mm:ss";
NSString *defaultLocale = [dateFormatter stringFromDate:date];
// dateFormatter.locale.localeIdentifier:ja_JP defaultLocale:2014/02/17 午後11:35:44

dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSString *usLocale = [dateFormatter stringFromDate:date];
// dateFormatter.locale.localeIdentifier:en_US_POSIX usLocale:2014/02/17 23:35:44


データフォーマットのlocaleをen_US_POSIXidentifierで上書きしてあげるだけでOK
こういう処理はいちいち入れるのではなく、NSDateクラスをカテゴライズした方が使いやすいかも
2015-01-31 14:02 コメント
Anonymous
0

Anonymous

{ 賛成 }:

locale の設定をしっかりしないとダメだということですね。

それならちゃんと NSDateFormatter に NSLocale を設定しましょう。

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setLocale:[NSLocale systemLocale]];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
[formatter setDateFormat:@"HH mm ss"];
NSString *todayString = [formatter stringFromDate:[NSDate date]];


というわけで、これで「24時間表示」が「オフ」になっていても「12 34 56」が返ってくると思います。
2015-01-31 14:03 コメント

ログインまたは登録してから回答してください

EXIT フルスクリーンモード 回答