TOP →
Java →
TIPS → This Page
SimpleDateFormatの注意点【Java の TIPS、小ネタ、注意点】
前提
Java開発における
SimpleDateFormatクラスの注意点を紹介します。
このページに記載している内容は2024/10/30に書かれたものです。
掲載している内容が将来的に変更されている場合があります。
よく見かけるSimpleDateFormatクラスの使い方
存在する日付文字列をパースした場合
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
* SimpleDateFormat.setLenientの問題確認サンプル1
*
* @author みっちー
*/
public class SimpleDateFormatSetLenient1 {
/**
* メイン
*
* @param args パラメータ
*/
public static void main(String[] args) {
System.out.println("SimpleDateFormat.setLenientの問題確認サンプル1");
DateFormat sdf = new SimpleDateFormat("yyyyMMdd");
try {
// 存在する日付を指定
System.out.println(sdf.parseObject("20240101"));
} catch (ParseException e) {
System.out.println("Date型変換失敗");
}
}
}
実行結果
SimpleDateFormat.setLenientの問題確認サンプル1
Mon Jan 01 00:00:00 JST 2024
当然、その日付でパースされます。
SimpleDateFormatクラス利用での注意点
しかし2月30日などの存在しない日付を指定すると・・・
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
* SimpleDateFormat.setLenientの問題確認サンプル2
*
* @author みっちー
*/
public class SimpleDateFormatSetLenient2 {
/**
* メイン
*
* @param args パラメータ
*/
public static void main(String[] args) {
System.out.println("SimpleDateFormat.setLenientの問題確認サンプル2");
DateFormat sdf = new SimpleDateFormat("yyyyMMdd");
try {
// 存在しない日付を指定
System.out.println(sdf.parseObject("20240230"));
} catch (ParseException e) {
System.out.println("Date型変換失敗");
}
}
}
実行結果
SimpleDateFormat.setLenientの問題確認サンプル2
Fri Mar 01 00:00:00 JST 2024
なんと、例外が発生すると思いきや、3月1日でパースされてしまいました!?
これは想定外!
これを防ぐには、事前に setLenient メソッドで false を指定します。
(デフォルトで true が指定されています)
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
* SimpleDateFormat.setLenientの問題確認サンプル3
*
* @author みっちー
*/
public class SimpleDateFormatSetLenient3 {
/**
* メイン
*
* @param args パラメータ
*/
public static void main(String[] args) {
System.out.println("SimpleDateFormat.setLenientの問題確認サンプル3");
DateFormat sdf = new SimpleDateFormat("yyyyMMdd");
// 寛大チェックをfalse=>厳密チェック
sdf.setLenient(false);
try {
// 存在しない日付を指定
System.out.println(sdf.parseObject("20240230"));
} catch (ParseException e) {
System.out.println("Date型変換失敗");
}
}
}
実行結果
SimpleDateFormat.setLenientの問題確認サンプル3
Date型変換失敗
setLenient(true) は寛大なチェックという意味になるので
setLenient(false) で厳密なチェックにすれば勝手に変な日付でパースされることはなくなります。
更新履歴
2024/10/30 新規作成
TOP →
Java →
TIPS → This Page