Java で文字列を DateTime オブジェクトに変換する

Rupam Yadav 2023年10月12日
  1. Java で日付文字列を DateTime オブジェクトに変換するには SimpleDateFormatjava.util.Date を使用する
  2. Java 8 の日付と時刻のライブラリを使用して日付文字列を日時形式に変換する
  3. joda-time を使って日付文字列を日付時間形式に変換する
  4. Java の Timestamp コンストラクタを使って文字列の日付をタイムスタンプに変換する
  5. Java で日付文字列を LocalDate でタイムスタンプ Timestamp に変換する
  6. Java の atStartOfDay() メソッドで文字列の日付をタイムスタンプ Timestamp に変換する
Java で文字列を DateTime オブジェクトに変換する

この記事では、さまざまなアプローチと例を使って、与えられた文字列を DateTime オブジェクトに変換する方法を紹介します。

Java で日付文字列を DateTime オブジェクトに変換するには SimpleDateFormatjava.util.Date を使用する

SimpleDateFormat は、ロケールセンシティブな方法で日付を解析して書式設定するために使われるクラスです。これにより、文字列を DateTime に変換したり、DateTime オブジェクトを文字列に変換したりすることができます。

以下のコードでは、文字列 date_time を用いています。この文字列は SimpleDateFormat インスタンス dateParserparse メソッドを呼び出して解析されます。解析したい文字列 date_time の形式は SimpleDateFormat のコンストラクタで指定します。

また、異なるフォーマットで SimpleDateFormat クラスの新しいインスタンスを作成しました。解析された date はフォーマットされて出力されます。

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

public class StringToDateTime {
  public static void main(String[] args) {
    String date_time = "11/27/2020 05:35:00";
    SimpleDateFormat dateParser = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
    {
      try {
        Date date = dateParser.parse(date_time);
        System.out.println(date);

        SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yy");
        System.out.println(dateFormatter.format(date));

      } catch (ParseException e) {
        e.printStackTrace();
      }
    }
  }
}

出力:

Fri Nov 27 05:35:00 UTC 2020
11/27/20

Java 8 の日付と時刻のライブラリを使用して日付文字列を日時形式に変換する

LocaleDate クラスは、時刻を含まない ISO 形式の日付を表します。DateTimeFormatter クラスは、さまざまな形式の日付を解析するために使用します。DateTimeFormatterofPattern() メソッドをコールすることで、カスタムパターンを提供することができます。

LocaleDate には parse() メソッドがあり、カスタムのテキスト文字列と特定のフォーマッタ inputFormat を指定して解析し、LocalDate のインスタンスを取得します。取得した LocaleDate インスタンス date は、フォーマットされて出力されます。

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

public class Main {
  public static void main(String[] args) {
    DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");

    LocalDate date = LocalDate.parse("11/27/2020 05:35:00", inputFormat);

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

出力:

11/27/2020

joda-time を使って日付文字列を日付時間形式に変換する

joda-time は標準の DateTime ライブラリで、日付と時刻の計算を行うための豊富なメソッドを提供します。このライブラリの機能をインクルードするための maven 依存関係は以下の通りです。

 <!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10.8</version>
    </dependency>

DateTimeFormatter は、日付と時刻のカスタム表現を解析することができます。

フォーマッタのインスタンス datetimeformat をカスタムパターンで作成します。フォーマッタインスタンスで parseDateTime をコールすると、カスタム文字列 dateTime を用いた DateTime オブジェクトが得られます。

ここでは、カスタムパターンを変更して新しい DateTimeFormatter インスタンス dateTimeFormatOut を作成しました。新しいインスタンスで print() メソッドが呼ばれ、DateTime オブジェクト joda_time を新しいフォーマットで表示します。

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class StringToDateTime {
  public static void main(String[] args) {
    String dateTime = "11/27/2020 05:35:00";
    DateTimeFormatter datetimeformat = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");

    DateTime joda_time = datetimeformat.parseDateTime(dateTime);
    System.out.println("joda_time : " + joda_time);

    DateTimeFormatter dateTimeFormatOut = DateTimeFormat.forPattern("MM/dd/yyyy");
    System.out.println("date time format out:  " + dateTimeFormatOut.print(joda_time));
  }
}

出力:

joda_time : 2020-11-27T05:35:00.000+05:30
date time format out:  11/27/2020

Java の Timestamp コンストラクタを使って文字列の日付をタイムスタンプに変換する

ここでは、Timestamp コンストラクタを用いて Timestamp オブジェクトを取得します。まず、SimpleDateFormat クラスを用いて date のフォーマットを設定し、parser() メソッドを用いて日付オブジェクトを取得した後、geteTime() メソッドを用いて日付に時間を加え、結果として timestamp を取得します。以下の例を参照してください。

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleTesting {
  public static void main(String[] args) {
    try {
      DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
      Date date = dateFormat.parse("12/10/1990");
      Timestamp timeStampDate = new Timestamp(date.getTime());
      System.out.println(timeStampDate);
    } catch (ParseException e) {
      System.out.println(e);
    }
  }
}

出力:

 1990-10-12 00:00:00.0

Java で日付文字列を LocalDate でタイムスタンプ Timestamp に変換する

Java 8 では、日付と時刻を扱ういくつかのクラスを含む新しい java.time パッケージが追加されます。ここでは、そのパッケージの LocalDate クラスを利用します。LocalDate クラスの parse() メソッドを使って日付文字列から LocalDate オブジェクトを取得し、atTime() メソッドを使って時刻付きの日付を返す LocalDateTime オブジェクトを取得します。現在の時刻を取得するには now() を用います。

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class SimpleTesting {
  public static void main(String[] args) {
    LocalDate date = LocalDate.parse("2025-11-25");
    System.out.println(date);
    LocalDateTime dateTime = date.atTime(LocalTime.now());
    System.out.println(dateTime);
  }
}

出力:

2025-11-25
2025-11-25T09:44:56.814795

Java の atStartOfDay() メソッドで文字列の日付をタイムスタンプ Timestamp に変換する

LocalDate クラスの atStartOfDay() メソッドも LocalDateTime オブジェクトを取得するために利用します。このメソッドは一日の始まりの日付に時間を加え、単純な日付ではなく date-time を返します。以下の例を参照してください。

import java.time.LocalDate;
import java.time.LocalDateTime;

public class SimpleTesting {
  public static void main(String[] args) {
    String strDate = "2019-10-20";
    LocalDate date = LocalDate.parse(strDate);
    LocalDateTime dateTime = date.atStartOfDay();
    System.out.println(dateTime);
  }
}

出力:

2019-10-20T00:00
著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

関連記事 - Java DateTime