読者です 読者をやめる 読者になる 読者になる

山崎屋の技術メモ

IT業界で働く中で、気になること、メモしておきたいことを書いていきます。

SimpleDateFormatの厳密な・・・ 時刻バージョン

java

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


たとえば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)

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

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