Як я можу перетворити рядок у a LocalDate
?
Я бачив такі приклади:
LocalDate dt = new LocalDate("2005-11-12");
Але мої струни такі:
2005-nov-12
Як я можу перетворити рядок у a 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 або новішої версії, зверніться до відповіді герци
Оскільки 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.
Використання часу Joda:
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();
Форматування дати проводиться org.joda.time.format.DateTimeFormatter class
. Три класи надають фабричні методи створення форматів , і це один. Інші є 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
є безпечним для ниток і незмінним , за умови, що це також хронологія . Всі стандартні класи хронології, що постачаються, є безпечними для потоків і незмінними.
DateTimeFormatter
має вбудовані формати, які можна безпосередньо використовувати для розбору послідовностей символів. Це чутливий випадок, Nov працюватиме, однак Nov і NOV не будуть працювати:
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
надає власний спосіб створення форматера. Це Case Insensitive, листопад, листопад та 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
}