前回の続きですが、時刻でも同じです。


たとえば8時52分60秒は、文字列をDate型にパースする際に、厳密な解析を行わなければ8時53分0秒と解釈されます。

public class DateSample {
    public static void main(String[] args) {
        DateFormat dt = new SimpleDateFormat("hh:mm:ss");
//        dt.setLenient(false);
        try {
            System.out.println(dt.parseObject("08:52:60"));
        } catch (ParseException e) {
            System.out.println("Date型に変換できません!!");
        }
    }
}

実行結果

Thu Jan 01 08:53:00 JST 1970


一方、厳密な解析を行うとエラーになります。

public class DateSample {
    public static void main(String[] args) {
        DateFormat dt = new SimpleDateFormat("hh:mm:ss");
        dt.setLenient(false); // ← ここを追加
        try {
            System.out.println(dt.parseObject("08:52:60"));
        } catch (ParseException e) {
            System.out.println("Date型に変換できません!!");
        }
    }
}

実行結果

Date型に変換できません!!

でも、"8:5:6"とかは、厳密な解析でもエラーとならず、"08:05:06"と同じ意味で解釈されます。

(追記)
うるう秒が発生した場合、○○時XX分60秒が発生するはず!正しくパースできないのか!?

即戦力にならないといけない人のためのJava入門(Java 8対応) エンタープライズシステム開発ファーストステップガイド (CodeZine BOOKS)

即戦力にならないといけない人のためのJava入門(Java 8対応) エンタープライズシステム開発ファーストステップガイド (CodeZine BOOKS)

  • 作者: 竹田晴樹,渡邉裕史,佐藤大地,多田丈晃,上川伸彦
  • 出版社/メーカー: 翔泳社
  • 発売日: 2016/07/05
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

やさしいJava 第5版 (「やさしい」シリーズ)

やさしいJava 第5版 (「やさしい」シリーズ)

  • 作者: 高橋麻奈
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2013/08/30
  • メディア: 単行本
  • この商品を含むブログ (5件) を見る