プロが教える店舗&オフィスのセキュリティ対策術

フォームの値(年、月、日)を取得し、
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()));

A 回答 (3件)

Formatter (Java 2 Platform SE 5.0)


http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …

のフラグの項を見ると、
s 書式指定に対して '0'というフラグを指定することは
できないようです。
Cのprintfから連想すると指定できても0による
パディングはできないと思います。

もしどうしても0によるパディングをしたいのであれば、
一端整数型にするなどの手段をとる必要があると思います。

"04d", Integer.parseInt(stryear)

見たいな感じで。
    • good
    • 0
この回答へのお礼

なるほど!
ありがとうございます!
できました!

お礼日時:2007/07/12 19:07

・空白に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 ))
    • good
    • 0
この回答へのお礼

そうなんですねー!
ありがとうございます!

お礼日時:2007/07/12 19:07

提示されている情報が少ないので勘違いしていたらごめんなさい。



(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で大丈夫かと思っているのですが。。

補足日時:2007/07/12 02:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!