- ベストアンサー
string formatについて
フォームの値(年、月、日)を取得し、 yyyy/mm/ddのようにformatしたいのですが、 以下の場合ですと、年2007 月07 日11 としていると、 例外が発生してしまいます。(java.util.FormatFlagsConversionMismatchException) 元々4桁,2桁あるものに関しては0埋めできないのでしょうか? ご教示願います。 (String.format("%04s/%02s/%02s", form.getStart_date_y(), form.getStart_date_m(), form.getStart_date_d()));
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Formatter (Java 2 Platform SE 5.0) http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Formatter.html#syntax のフラグの項を見ると、 s 書式指定に対して '0'というフラグを指定することは できないようです。 Cのprintfから連想すると指定できても0による パディングはできないと思います。 もしどうしても0によるパディングをしたいのであれば、 一端整数型にするなどの手段をとる必要があると思います。 "04d", Integer.parseInt(stryear) 見たいな感じで。
その他の回答 (2)
- bgbg
- ベストアンサー率53% (94/175)
・空白に0を埋めるフラグ"0"は書式が整数か浮動少数点("d","f"等)でないとエラーになります。 これがFormatFlagsConversionMismatchExceptionの直接の原因です。 ・書式で"d"を使用するとき、引数に許されるクラスはInteger,Double等の数値を表すクラスです。Stringクラスには適用できません。 以上を踏まえてソースを書き換えるとこうなります。 String.Format("%04d/%02d/%02d",new Integer( form.getStart_date_y ),new Integer( form.getStart_date_m ),new Integer( form.getStart_date_d ))
お礼
そうなんですねー! ありがとうございます!
- sakusaker7
- ベストアンサー率62% (800/1280)
提示されている情報が少ないので勘違いしていたらごめんなさい。 (String.format("%04s/%02s/%02s", form.getStart_date_y(), form.getStart_date_m(), form.getStart_date_d())); get*_date_?() ってint を返してそうな気がするんですがどうなんでしょうか? エラーメッセージからすると、書式指定が %s なのにint渡しているので 文句言ってるように思えるのですが。
補足
書き込みありがとうございます。 こちらの説明不足ですいません。 form.get*date()はStringを返しています。 なので%sで大丈夫かと思っているのですが。。
お礼
なるほど! ありがとうございます! できました!