Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで文字列から日付を解析する方法:SimpleDateFormatを使った日付フォーマットの変換

Javaでは、java.textパッケージに含まれるSimpleDateFormatクラスを使用することで、日付を任意の形式(ロケール対応)でフォーマットしたり、文字列から解析(パース)したりすることができます。

このクラスのコンストラクタの一つは、希望する日付フォーマットを表すString型の値を受け取り、SimpleDateFormatオブジェクトを生成します。

また、このクラスが提供するformat()メソッドは、java.util.Dateオブジェクトを引数として受け取り、現在のオブジェクトが表すフォーマットに従った日付・時刻の文字列を返します。

日付文字列を別のフォーマットに変換する手順

  • 入力された日付文字列を取得します。
  • その文字列をjava.util.Dateオブジェクトに変換します。
  • 新しい(希望する)フォーマットを文字列としてコンストラクタに渡し、SimpleDateFormatクラスをインスタンス化します。
  • 上記で取得したDateオブジェクトを引数としてformat()メソッドを呼び出します。

サンプルコード

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class FormattingDate {
    public static Date StringToDate(String dob) throws ParseException {
        // SimpleDateFormatクラスのインスタンス化
        SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
        // 指定された文字列をDateオブジェクトに解析
        Date date = formatter.parse(dob);
        System.out.println("Date object value: "+date);
        return date;
    }
    public static void main(String args[]) throws ParseException {
        // ユーザーから名前と生年月日を読み込む
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter your name: ");
        String name = sc.next();
        System.out.println("Enter your date of birth (dd-MM-yyyy): ");
        String dob = sc.next();
        // 文字列をDateに変換
        Date date = FormattingDate.StringToDate(dob);
        System.out.println("Select format: ");
        System.out.println("a: MM-dd-yyyy || b: dd-MM-yyyy || c: yyyy-MM-dd ");
        char ch = sc.next().toCharArray()[0];;
        switch (ch) {
            case 'a':
                System.out.println("Date in the format: MM-dd-yyyy");
                System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(date));
                break;
            case 'b':
                System.out.println("Date in in the format: dd-MM-yyyy");
                System.out.println(new SimpleDateFormat("dd-MM-yyyy").format(date));
                break;
            case 'c':
                System.out.println("Date in the format: yyyy-MM-dd");
                System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
                break;
            default:
                System.out.println("Model not found");
                break;
        }
    }
}

実行結果

Enter your name:
Krishna
Enter your date of birth (dd-MM-yyyy):
26-09-1989
Date object value: Tue Sep 26 00:00:00 IST 1989
Select format:
a: MM-dd-yyyy || b: dd-MM-yyyy || c: yyyy-MM-dd
a
Date in the format: MM-dd-yyyy
09-26-1989

補足:より新しいAPI「java.time」について

上記のSimpleDateFormatはJava 8以前から使われている伝統的な手法ですが、スレッドセーフではないという注意点があります。Java 8以降では、スレッドセーフで直感的なjava.timeパッケージ(DateTimeFormatter、LocalDateなど)の使用が推奨されています。新規プロジェクトでは、以下のように記述することもできます。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class ModernDateExample {
    public static void main(String[] args) {
        DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        LocalDate date = LocalDate.parse("26/09/1989", inputFormat);

        DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        System.out.println(date.format(outputFormat)); // 1989-09-26
    }
}

用途や対象のJavaバージョンに応じて、適切なAPIを選択するとよいでしょう。

  1. MySQLでDD/MM/YYYY形式の日付をSELECTして降順に並べ替える方法

    MySQLでは、SELECTとORDER BY ... DESCを組み合わせることで、DD/MM/YYYY形式で保存された日付文字列を正しく日付として解釈し、新しい順(降順)に並べ替えて取得できます。基本となる構文は以下の通りです。SELECT *FROM yourTableName where yourDatetimeColumnName order by STR_TO_DATE(yourDatetimeColumnName,%d/%m%Y) desc;ここでのポイントはSTR_TO_DATE()関数です。「日/月/年」形式の文字列をMySQLが認識できる日付値に変換してくれるため、単純な文

  2. PHP・MySQLで日付形式をdd/mm/yyyyに変更する方法

    PHPやMySQLでは、日付の表示形式を自由に変更できます。本記事では、日付を「dd/mm/yyyy(日/月/年)」形式に変換する方法を、PHPとMySQLそれぞれのケースについて解説します。PHPで日付形式を変更する方法PHPでは、date()関数を使って日付形式を簡単に変更できます。基本構文は以下の通りです。date(d/m/Y, 日時の変数);また、文字列を日付として扱う場合は、strtotime()関数を使用します。この関数は、日付を表す文字列をUnixタイムスタンプに変換してくれるため、date()関数と組み合わせて使うのが一般的です。以下は、日時を「dd/mm/yyyy」形式に整形