山崎屋の技術メモ

IT業界で働く中でテクノロジーを愛するSIerのシステムエンジニア👨‍💻 | AndroidとWebアプリの二刀流🧙‍♂️ | コードの裏にあるストーリーを綴るブログ執筆者✍️ | 日々進化するデジタル世界で学び続ける探究者🚀 | #TechLover #CodeArtisan、気になること、メモしておきたいことを書いていきます。

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

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


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

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

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