Jak mogę zamienić ciąg na ciąg LocalDate
?
Widziałem przykłady takie jak:
LocalDate dt = new LocalDate("2005-11-12");
Ale moje struny są takie:
2005-nov-12
Jak mogę zamienić ciąg na ciąg LocalDate
?
Widziałem przykłady takie jak:
LocalDate dt = new LocalDate("2005-11-12");
Ale moje struny są takie:
2005-nov-12
Odpowiedzi:
Używając Joda Time, powinieneś używać DateTimeFormatter
:
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);
Jeśli używasz Java 8 lub nowszej, zapoznaj się z odpowiedzią hertzi
Od wersji Java 1.8 można to osiągnąć bez dodatkowej biblioteki, używając klas java.time . Zobacz samouczek .
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);
Jednak składnia jest prawie taka sama.
Może być konieczne przejście z DateTime do LocalDate.
Korzystanie z czasu Joda:
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();
Formatowanie daty i godziny jest wykonywane przez org.joda.time.format.DateTimeFormatter class
. Trzy klasy zapewniają metody fabryczne do tworzenia elementów formatujących , a to jest jedna. Pozostali to ISODateTimeFormat
i DateTimeFormatterBuilder
.
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);
final org.joda.time.LocalDate class
jest niezmienną klasą datetime reprezentującą datę bez strefy czasowej . LocalDate
jest bezpieczny dla wątków i niezmienny , pod warunkiem, że chronologia jest również. Wszystkie dostarczane standardowe klasy chronologii są bezpieczne dla wątków i niezmienne.
DateTimeFormatter
ma wbudowane formaty, których można bezpośrednio użyć do przeanalizowania sekwencji znaków. Jest rozróżniana wielkość liter, listopad zadziała, ale listopad i listopad nie będą działać:
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
zapewnia niestandardowy sposób tworzenia programu formatującego. Bez rozróżniania wielkości liter, listopad, listopad i listopad będą traktowane tak samo.
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
}