Java で文字列を LocalDate に変換する

Mohammad Irfan 2023年10月12日
  1. Java で parse() メソッドを使用して文字列を LocalDate に変換する
  2. Java で parse() および ofPattern() メソッドを使用して文字列を LocalDate に変換する
  3. Java で文字列名として月を持つ文字列日付を変換する
  4. Java で文字列名として日と月を持つ文字列の日付を変換する
  5. Java で時間のある文字列日付を LocalDate に変換する
  6. まとめ
Java で文字列を LocalDate に変換する

このチュートリアルでは、Java での例を使用して、文字列から LocalDate への変換を紹介します。

LocalDate は Java のクラスであり、ローカルの日付を表すのに役立ちます。日付が表される形式は yyyy-mm-dd です。

場合によっては、文字列を LocalDate に変換して、LocalDate クラスによって提供される関数を使用したいことがあります。このチュートリアルでは、文字列を LocalDate に変換するさまざまな方法を説明します。

日付はさまざまな形式で表すことができます。フォーマッターインスタンスを作成する必要があります。DateTimeFormatter クラスを使用してフォーマッタを作成できます。

次に、フォーマッターインスタンスを LocalDate.parse() メソッドに渡します。渡された文字列が解析できない場合、LocalDate.parse() メソッドは DateTimeParseException をスローします。

解析は文字列を日付に変換することと同じであり、フォーマットは Java で日付を文字列に変換することを意味することに注意してください。

Java で parse() メソッドを使用して文字列を LocalDate に変換する

日付が ISO ローカル日付形式(yyyy-mm-dd)の場合、形式を設定する必要はありません。文字列を直接解析して、ローカル日付を返す parse() メソッドを使用できます。

以下の例を参照してください。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SimpleTesting {
  public static void main(String args[]) {
    String JE_date = "2021-12-21";
    // parsing the string to convert it into date
    LocalDate local_date = LocalDate.parse(JE_date);
    System.out.println(local_date);
  }
}

出力:

2021-12-21

Java で parse() および ofPattern() メソッドを使用して文字列を LocalDate に変換する

文字列の日付が ISO 形式でない場合は、DateTimeFormatter.ofPattern() メソッドを使用してその形式を変換してから、引数として形式タイプを渡して parse() メソッドを呼び出す必要があります。

以下の例を参照してください。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SimpleTesting {
  public static void main(String args[]) {
    String JE_date = "21/12/2021";
    DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    // parsing the string to convert it into date
    LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
    System.out.println(local_date);
  }
}

出力:

2021-12-21

Java で文字列名として月を持つ文字列日付を変換する

文字列の日付に JanFebMar などの文字で月の名前が含まれている場合は、ofPattern() メソッドを MMM 引数とともに使用する必要があります。これはエラーなしでのみ機能します。デフォルトのロケールが Locale.English または Locale.US の場合。

言い換えると、ロケールは、文字列を解析するために月が記述されている言語を理解する必要があります。ロケールは、特定の地理的、政治的、または文化的地域を表すオブジェクトです。

以下のコードを見てください。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SimpleTesting {
  public static void main(String args[]) {
    String JE_date = "21-Dec-2021";
    DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
    // parsing the string to convert it into date
    LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
    System.out.println(local_date);
  }
}

出力:

2021-12-21

上記の形式では大文字と小文字が区別されることに注意してください。Dec の代わりに dec と書くと例外が発生します。

以下の例を参照してください。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SimpleTesting {
  public static void main(String args[]) {
    String JE_date = "21-dec-2021";
    DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
    // parsing the string to convert it into date
    LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
    System.out.println(local_date);
  }
}

出力:

Exception in thread "main" java.time.format.DateTimeParseException: Text '21-dec-2021' could not be parsed at index 3
    at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2052)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1954)
    at java.base/java.time.LocalDate.parse(LocalDate.java:430)
    at SimpleTesting.main(SimpleTesting.java:8)

ここで、デフォルトのロケールを、中国などの英語を理解できない別の国に変更してみましょう。これを行うには、Locale.setDefault() メソッドを使用し、必要なロケール(この場合は Locale.CHINESE)を引数として渡します。

以下のコードを見てください。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class SimpleTesting {
  public static void main(String args[]) {
    Locale.setDefault(Locale.CHINESE); // setting locale as chinese
    String JE_date = "21-Dec-2021";
    DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
    // parsing the string to convert it into date
    LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
    System.out.println(local_date);
  }
}

出力:

Exception in thread "main" java.time.format.DateTimeParseException: Text '21-Dec-2021' could not be parsed at index 3
    at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2052)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1954)
    at java.base/java.time.LocalDate.parse(LocalDate.java:430)
    at SimpleTesting.main(SimpleTesting.java:10)

上記のコードでは、中国語のロケールが英語を理解していないため、月の名前を理解できないため、エラーが発生します。文字列がフランス語であると仮定します:21-mai-2021 次に、これを日付に変換するには、ofPattern() メソッドの引数として Locale.FRANCE を渡す必要があります。

以下の例を参照してください。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class SimpleTesting {
  public static void main(String args[]) {
    String JE_date = "21-mai-2021";
    DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.FRANCE);
    // parsing the string to convert it into date
    LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
    System.out.println(local_date);
  }
}

出力:

2021-05-21

したがって、例外を回避するために、日付に英語の単語が含まれている場合は、引数として Locale.US を渡します。

Java で文字列名として日と月を持つ文字列の日付を変換する

文字列の日付には、2021 年 12 月 21 日火曜日など、英語の略語として日と月の名前を含めることができます。前の場合と同様に、この日付をローカル日付に変換するには、ofPattern() メソッドを使用してこの形式を簡単に変換できます。

以下の例を参照してください。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class SimpleTesting {
  public static void main(String args[]) {
    String JE_date = "Tue, Dec 21 2021";
    DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("E, MMM d yyyy", Locale.US);
    // parsing the string to convert it into date
    LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
    System.out.println(local_date);
  }
}

出力:

2021-12-21

ofPattern() メソッドの引数として Locale.US を渡したことに注意してください。デフォルトのロケールが英語でない場合、例外を防ぐためです。

Java で時間のある文字列日付を LocalDate に変換する

文字列の日付には、Tuesday, Dec 21, 2021, 10:30:15 PM のような日付が含まれる場合もあります。この日付を変換するには、最初に ofPattern() メソッドで形式を設定してから、parse() メソッドを使用してローカル日付を取得する必要があります。

以下の例を参照してください。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class SimpleTesting {
  public static void main(String args[]) {
    String JE_date = "Tuesday, Dec 21, 2021 10:30:15 PM";
    DateTimeFormatter JEFormatter =
        DateTimeFormatter.ofPattern("EEEE, MMM d, yyyy hh:mm:ss a", Locale.US);
    // parsing the string to convert it into date
    LocalDate local_date = LocalDate.parse(JE_date, JEFormatter);
    System.out.println(local_date);
  }
}

出力:

2021-12-21

まとめ

このチュートリアルでは、Java で文字列を LocalDate に変換する方法について説明しました。上記の形式とは別に、日付を取得するために他のいくつかの形式を使用できます。

関連記事 - Java Date

関連記事 - Java String