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

Javaで文字列からDateオブジェクトを生成する方法を徹底解説

Javaの開発では、日付を表す文字列(例:"2007-12-03")を Date オブジェクトに変換したい場面がよくあります。この記事では、代表的な4つの方法——SimpleDateFormatLocalDateDateUtilsInstant クラスを使った変換手法を、サンプルコード付きでわかりやすく解説します。


方法1:SimpleDateFormatクラスを使う

SimpleDateFormat は、java.textパッケージに含まれる伝統的な日付フォーマット用クラスです。コンストラクタに希望する日付形式を表す文字列を渡してインスタンス化し、parse() メソッドで文字列をDateオブジェクトに変換します。

手順

  • 希望する書式文字列を引数にしてSimpleDateFormatクラスをインスタンス化する
  • parse() メソッドを使って日付文字列を解析(パース)する

サンプルコード

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

public class Sample {
    public static void main(String args[]) throws ParseException {
        String date_string = "2007-25-06";

        // SimpleDateFormatクラスをインスタンス化
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-dd-MM");

        // 文字列をDateオブジェクトにパース
        Date date = formatter.parse(date_string);

        System.out.println("Date value: " + date);
    }
}

実行結果

Date value: Mon Jun 25 00:00:00 IST 2007

なお、書式パターンが実際の文字列と一致していない場合(例:"yyyy-dd-MM"に対して"2007-06-25"を渡した場合など)は、ParseException がスローされるため、適切な例外処理を行うことが重要です。

方法2:LocalDateクラスを使う(Java 8以降推奨)

Java 8で導入された日時API(java.timeパッケージ)の LocalDate クラスには、ISO-8601形式(yyyy-MM-dd)の日付文字列を受け取り、LocalDateオブジェクトを返す parse() メソッドが用意されています。従来のDateクラスと比べてスレッドセーフで扱いやすいため、新規開発ではこちらの利用が推奨されます。

サンプルコード

import java.time.LocalDate;

public class Test {
    public static void main(String args[]) {
        LocalDate date = LocalDate.parse("2007-12-03");
        System.out.println(date);
    }
}

実行結果

2007-12-03

また、独自の書式でパースしたい場合は、DateTimeFormatter を組み合わせることもできます。

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

public class Test2 {
    public static void main(String args[]) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        LocalDate date = LocalDate.parse("25/06/2007", formatter);
        System.out.println(date);
    }
}

方法3:Apache Commons LangのDateUtilsクラスを使う

DateUtils は、Apache Commons Langライブラリ(org.apache.commons.lang3.time パッケージ)が提供するユーティリティクラスです。複数の書式候補をまとめて試せるのが特徴で、入力される日付形式が不定の場合に便利です。Mavenプロジェクトでは以下の依存関係を追加します。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
</dependency>

parseDate() メソッドは、日付文字列と書式文字列(可変長引数で複数指定可能)をパラメータとして受け取り、Dateオブジェクトを返します。

サンプルコード

import java.util.Date;
import org.apache.commons.lang3.time.DateUtils;

public class Test {
    public static void main(String args[]) throws Exception {
        String dateInString = "07-06-2013";

        // 複数の書式候補を渡すことも可能
        Date date = DateUtils.parseDate(dateInString,
                "yyyy-MM-dd", "dd-MM-yyyy");

        System.out.println(date);
    }
}

実行結果

Sat Dec 03 00:00:00 IST 12

どの書式でも解析できなかった場合は ParseException がスローされる点に注意してください。

方法4:Instantクラスを使う

java.timeパッケージの Instant クラスは、タイムライン上の時刻(エポックからの経過時間)を表します。parse() メソッドは、ISO-8601形式(例:2014-10-05T15:23:01Z)の日付文字列を受け取り、対応するInstantオブジェクトを返します。UTCベースの時刻を扱う場合に最適です。

サンプルコード

import java.time.Instant;

public class Test {
    public static void main(String args[]) {
        String dateInString = "2014-10-05T15:23:01Z";
        Instant instant = Instant.parse(dateInString);
        System.out.println(instant);
    }
}

実行結果

2014-10-05T15:23:01Z

まとめ:使い分けのポイント

  • SimpleDateFormat:レガシーなコードや古いJavaバージョンとの互換性が必要な場合に使用。ただしスレッドセーフではないため注意。
  • LocalDate / java.time API:Java 8以降なら第一候補。イミュータブルでスレッドセーフ、APIも直感的。
  • DateUtils:複数の書式が混在する入力を柔軟に処理したい場合に有効。
  • Instant:UTC基準のタイムスタンプ(Z付きISO-8601形式)を扱う場合に使用。

用途やJavaのバージョンに応じて最適な方法を選択することで、安全かつ効率的に文字列から日付オブジェクトへの変換を行えます。

  1. JavaScriptでDateオブジェクトを作成する方法をわかりやすく解説

    JavaScriptで日付や時刻を扱うには、Dateオブジェクトを使用します。new Date()コンストラクタを呼び出すだけで、現在の日時に基づいたDateオブジェクトを簡単に生成できます。以下に、ボタンをクリックすると現在の日時を持つDateオブジェクトを作成し、画面に表示するサンプルコードを示します。コード例<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport"

  2. 【Swift入門】DateComponentsとCalendarで日付オブジェクトを作成する2つの方法

    Swiftで日付(Date)オブジェクトを作成するには、DateComponents()を使用します。作成方法は大きく分けて2つあり、ここではシミュレータではなくPlaygroundを使ってコードを検証していきます。 日付の生成には「日付コンポーネント」と「カレンダー」を組み合わせます。まず、DateComponentsの作成方法を2つのパターンで見ていきましょう。 方法1:デフォルトのイニシャライザを使う 1つ目は、DateComponents()が持つデフォルトのイニシャライザに、必要な情報をまとめて渡す方法です。 var date = DateComponents.init(