文字列をLocalDate
に変換するにはどうすればよいですか?
私は次のような例を見てきました:
LocalDate dt = new LocalDate("2005-11-12");
しかし、私の文字列は次のようなものです。
2005-nov-12
Joda Timeを使用するときは、DateTimeFormatter
を使用する必要があります。
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);
Java 8以降を使用している場合は、 hertziの答え を参照してください
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);
ただし、構文はほぼ同じです。
DateTimeからLocalDateに移動する必要がある場合があります。
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();
日時の書式設定は、org.joda.time.format.DateTimeFormatter class
によって実行されます。 3つのクラスがフォーマッタを作成するファクトリメソッドを提供します。これは1つです。その他はISODateTimeFormat
とDateTimeFormatterBuilder
です。
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);
final org.joda.time.LocalDate class
は、日付を表す不変の日時クラスですタイムゾーンなし。 LocalDate
はthread-safe and immutableです。ただし、Chronologyも同様です。提供されるすべての標準のChronologyクラスは、スレッドセーフで不変です。
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
}