web-dev-qa-db-ja.com

LocalDateへの文字列

文字列をLocalDateに変換するにはどうすればよいですか?

私は次のような例を見てきました:

LocalDate dt = new LocalDate("2005-11-12");

しかし、私の文字列は次のようなものです。

2005-nov-12
91
clankill3r

Joda Timeを使用するときは、DateTimeFormatterを使用する必要があります。

final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);

Java 8以降を使用している場合は、 hertziの答え を参照してください

70
fge

Java.time

Java 1.8以降、 Java.time クラスを使用して、追加のライブラリなしでこれを実現できます。 。 チュートリアル を参照してください。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
formatter = formatter.withLocale( putAppropriateLocaleHere );  // Locale specifies human language for translating, and cultural norms for lowercase/uppercase and abbreviations and such. Example: Locale.US or Locale.CANADA_FRENCH
LocalDate date = LocalDate.parse("2005-nov-12", formatter);

ただし、構文はほぼ同じです。

165
hertzi

DateTimeからLocalDateに移動する必要がある場合があります。

DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();
13
Spencer Kormos

日時の書式設定は、org.joda.time.format.DateTimeFormatter classによって実行されます。 3つのクラスがフォーマッタを作成するファクトリメソッドを提供します。これは1つです。その他はISODateTimeFormatDateTimeFormatterBuilderです。

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);

final org.joda.time.LocalDate classは、日付を表す不変の日時クラスですタイムゾーンなしLocalDatethread-safe and immutableです。ただし、Chronologyも同様です。提供されるすべての標準のChronologyクラスは、スレッドセーフで不変です。

8
Chandra Sekhar

DateTimeFormatterには、文字シーケンスの解析に直接使用できる組み込み形式があります。大文字と小文字が区別されますが、11月は機能しますが、11月と11月は機能しません。

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MMM-dd");

try {
    LocalDate datetime = LocalDate.parse(oldDate, pattern);
    System.out.println(datetime); 
} catch (DateTimeParseException e) {
    // DateTimeParseException - Text '2019-nov-12' could not be parsed at index 5
    // Exception handling message/mechanism/logging as per company standard
}

DateTimeFormatterBuilderは、フォーマッタを作成するカスタムの方法を提供します。大文字と小文字は区別されません。Nov、nov、およびNOVは同じものとして扱われます。

DateTimeFormatter f = new DateTimeFormatterBuilder().parseCaseInsensitive()
        .append(DateTimeFormatter.ofPattern("yyyy-MMM-dd")).toFormatter();
try {
    LocalDate datetime = LocalDate.parse(oldDate, f);
    System.out.println(datetime); // 2019-11-12
} catch (DateTimeParseException e) {
     // Exception handling message/mechanism/logging as per company standard
}