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時間表記だよね???


というわけでググるとありました!

なるほど、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」が返ってくるようになりました。