書式文字列の仕様は以下の通りです。
UTS #35: Locale Data Markup Language
h Hour [1-12] H Hour [0-23] K Hour [0-11] k Hour [1-24]
それでこんなコードで実験してみると・・・
NSDate *now = [[NSDate date] retain]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"hh:mm:ss"]; NSString *formattedDate = [dateFormatter stringFromDate:now]; NSLog(@"%@", formattedDate); [dateFormatter setDateFormat:@"HH:mm:ss"]; formattedDate = [dateFormatter stringFromDate:now]; NSLog(@"%@", formattedDate); [dateFormatter setDateFormat:@"KK:mm:ss"]; formattedDate = [dateFormatter stringFromDate:now]; NSLog(@"%@", formattedDate); [dateFormatter setDateFormat:@"kk:mm:ss"]; formattedDate = [dateFormatter stringFromDate:now]; NSLog(@"%@", formattedDate);
こうなります。
書式 | 24時間表示 ON | 24時間表示 OFF |
hh | 22:00:57 | 10:00:57 |
00:06:27 | 12:06:27 | |
HH | 22:00:57 | 午後10:00:57 |
00:06:27 | 午前12:06:27 | |
KK | 22:00:57 | 10:00:57 |
24:06:27 | 00:06:27 | |
kk | 22:00:57 | 24:06:27 |
午後10:00:57 | 午前00:06:27 |
「午前」「午後」という文字列が混ざるのもダメですが、iPhone本体の設定に関わらず、まともに24時間表記が返ってくるものが1つもありません。
ていうか"hh"と"HH"、"KK"と"kk"の対応がおかしい。
そもそも"HH"は24時間表記が返ってくるのではないのか。
仕方が無いので、LocaleをUSに設定して使っています。
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"US"] autorelease]];
書式 | 24時間表示 ON | 24時間表示 OFF |
hh | 10:00:57 | 10:00:57 |
12:06:27 | 12:06:27 | |
HH | 22:00:57 | 22:00:57 |
00:06:27 | 00:06:27 | |
KK | 10:00:57 | 10:00:57 |
00:06:27 | 00:06:27 | |
kk | 22:00:57 | 22:00:57 |
24:06:27 | 24:06:27 |
この結果は、間違いなく正しい。