- - PR -
parse時にNumberFormatExceptionが発生する
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-07-07 15:44
java.text.DateFormat.parseを使用して
日付が入力されているか否かのチェックを行っています。 APIによると、ここで発生しうる例外はParseExceptionとなっていますが NumberFormatExceptionが発生してしまいました。 何故NumberFormatExceptionが発生してしまったか ご存知の方がいらっしゃったら教えてください。 <ログ> Caused by: java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Long.parseLong(Long.java:415) at java.lang.Long.parseLong(Long.java:452) at java.text.DigitList.getLong(DigitList.java:149) at java.text.DecimalFormat.parse(DecimalFormat.java:1068) at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1705) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1156) at java.text.DateFormat.parse(DateFormat.java:333) <ソース> private static final SimpleDateFormat FMT_YYYYMMDD = new SimpleDateFormat("yyyyMMdd"); public static boolean valid(String date) { Date ds; try { ds = FMT_YYYYMMDD.parse(date); } catch (ParseException e) { return false; } return FMT_YYYYMMDD.format(ds).equals(date); } | ||||
|
投稿日時: 2008-07-07 16:21
""をLong型に変換しているからなのでは・・・
入力データを確認してみては? | ||||
|
投稿日時: 2008-07-07 16:33
JDK1.1だとそういう現象が発生する「らしい」です。
http://java-house.jp/ml/archive/j-h-b/010336.html もうちょっと明確なソースが提示できればいいのですが。 | ||||
|
投稿日時: 2008-07-07 16:38
手前味噌ですが。
SimpleDateFormatでNumberFormatException スレッドセーフではないSimpleDateFormatをマルチスレッド下で使った場合の現象です。 | ||||
|
投稿日時: 2008-07-07 17:59
回答ありがとうございます。
>未記入さん 残念ながら入力データはログに出力していないので 今となってはユーザーが何を入力したのかわかりませんでした。 >rainさん 当方、JDK1.4.2になります。 >nagiseさん 確認したところ 今回はマルチスレッド下ではありませんでした。 お伝えする情報が少なかったようです。 折角教えていただいたのにすみません。 また、事前に入力チェックを行っていますので 引数の「String date」の部分は全角スペースにすることはできますが 半角スペースや""にすることはできないようにコーディングされています。 | ||||
|
投稿日時: 2008-07-07 18:07
Webシステムではない、ということでしょうか。 提示のソースのようにstaticフィールドにSimpleDateFormatのインスタンスを保持するようなユーティリティクラスを作った場合、Webシステムであればマルチスレッド下ですよ。 逆に、シングルスレッド下で同じ文字列をパースするときに常に例外が発生するなら、例外が発生する具体的なString文字列の値を提示してください。 | ||||
|
投稿日時: 2008-07-08 16:41
>nagiseさん
Webシステムです。 プログラム内での「java.lang.Thread」と勘違いしていました。 ご指摘ありがとうございます。 非チェック例外ではありますが NumberFormatExceptionをcatchすることを検討したいと思います。 ありがとうございました。 [ メッセージ編集済み 編集者: arare 編集日時 2008-07-08 17:22 ] | ||||
|
投稿日時: 2008-07-08 18:55
それは間違った対処法ですよ。 そもそもSimpleDateFormatをstaticフィールドに保持しないようにしましょう。 毎回生成して使い捨てるのが単純な対処法です。 |
1|2|3
次のページへ»