[iOS]NSDateFormatterを使って現在の時間を24時間表記の文字列で欲しい
NSDateFormatter を使って現在の時間を 24時間表記の文字列で欲しいと思った。
で、こんなコードにしてみた。
普段、自分の iPhone は「設定」-「一般」-「日付と時刻」の「24時間表示」を「オン」にして使っているので、上記のコードで返ってきたのは例えば 12時34分56秒なら「12 34 56」という文字列。
だけど、この「24時間表示」を「オフ」にしてると返ってくるのは「午後00 34 56」という文字列! ビックリ!
え~?大文字の H は 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時間表記だよね???
0
iQi - 面白いアプリを開発中
NSDateで「午前/午後」表示させない
データフォーマットのlocaleをen_US_POSIXidentifierで上書きしてあげるだけでOK
こういう処理はいちいち入れるのではなく、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クラスをカテゴライズした方が使いやすいかも
0
locale の設定をしっかりしないとダメだということですね。
それならちゃんと NSDateFormatter に NSLocale を設定しましょう。
というわけで、これで「24時間表示」が「オフ」になっていても「12 34 56」が返ってくると思います。
それならちゃんと 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」が返ってくると思います。