「//fix this/」の記事インデックス

//fix this/ Javaコードの間違いをさがせ!


このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。


第8回目 (Java Magazine 2013/May-Juneからの出題)


1. 今回のテーマ 「SimpleDateFormat を使用した日付の解析」 

ファイルからデータをロードする際、日付の解析で問題が起きる場合があります。 思い浮かぶ簡単な解決策は SimpleDateFormat を使用することですが、 これは適切な解決策なのでしょうか 。



2. コード

次のコードに目を通して、その結果について考えてください。


String value = "01-04-1989";
String dateFormatString = "yyyy-MM-dd";
SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatString);
try {
  System.out.println("Result: " +
        dateFormat.format(dateFormat.parse(value)));
} catch (ParseException e) {
  System.out.println("Error date parsing: " + value + " in format " +
       dateFormatString);
  e.printStackTrace();
}

3.正しいのはどれ?

1) Error parsing: 01-04-1989 in format yyyy-MM-dd

2) 0006-09-10

3) 1989-04-01

4) 0104-19-89

<ヒント>
パターン・マッチングについてよく考えること






【答え】

正解は、2)です。DateFormat クラス(SimpleDateFormat のスーパークラス)には lenient プロパティがあり、このケースでは厳密なパターン・マッチングを適用するため、このプロパティを false に設定する必要があります。DateFormat クラスを使用する際は注意してください。
正しいコードは次のようになります。


SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatSt
ring);
dateFormat.setLenient(false);"


<< 第7回へ戻る I 第9回へ進む >>

「//fix this/」の記事インデックス