013 クラスライブラリ(正規表現のパターンを扱うクラス) 021 解答例

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class DateValidator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // ユーザーからの入力を取得
        System.out.println("日付を入力してください(例: yyyy-MM-dd): ");
        String userInput = scanner.nextLine();

        // 検証する日付フォーマット
        String dateFormatPattern = "yyyy-MM-dd";

        // SimpleDateFormatを作成
        SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatPattern);
        dateFormat.setLenient(false); // 厳密な検証を行うために設定

        try {
            // パースを試みる
            Date parsedDate = dateFormat.parse(userInput);

            // パース成功時の処理
            System.out.println("入力された日付は有効です。");
        } catch (ParseException e) {
            // パース失敗時の処理
            System.out.println("入力された日付は無効です。指定されたフォーマットに合致していません。");
        }
    }
}

このプログラムでは、ユーザーからの入力が “yyyy-MM-dd” というフォーマットに合致しているかどうかを検証しています。SimpleDateFormatparse メソッドを使用して、ユーザーからの入力が有効な日付であるかどうかを確認しています。例外が発生する場合は、入力が無効であると見なします。

SimpleDateFormatクラス

SimpleDateFormat クラスは、Javaの日付と時刻のフォーマットや解析を行うためのクラスです。主に文字列と日付オブジェクトの相互変換をサポートします。以下は SimpleDateFormat クラスの主な特徴と使い方についての解説です。

1. フォーマットパターンの定義

SimpleDateFormat クラスでは、特定のフォーマットパターンを使用して日付や時刻の書式を指定します。以下は一般的なフォーマットの一部です:

  • y:年
  • M:月
  • d:日
  • H:時 (24 時間制)
  • h:時 (12 時間制)
  • m:分
  • s:秒
  • S:ミリ秒

例えば、”yyyy-MM-dd HH:mm:ss” は「年-月-日 時:分:秒」の形式です。

2. フォーマットとパース

フォーマット(Date → String)

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date currentDate = new Date();
String formattedDate = dateFormat.format(currentDate);
System.out.println(formattedDate);

パース(String → Date)

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dateString = "2023-11-26";
try {
    Date parsedDate = dateFormat.parse(dateString);
    System.out.println(parsedDate);
} catch (ParseException e) {
    e.printStackTrace();
}

3. 厳密な検証

setLenient(false) メソッドを使用して、厳密な検証を有効にすることができます。これにより、日付や時刻の範囲外の値に対するエラーが検出されます。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);

4. ロケールの設定

Locale クラスを使用してロケールを指定することができます。これにより、日付や月の表記が異なる地域に対応できます。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日", Locale.JAPAN);

SimpleDateFormat クラスを適切に利用することで、日付と時刻を文字列に変換したり、逆に文字列を日付オブジェクトに変換したりすることが容易になります。

「013 クラスライブラリ」問題集リスト