Как я могу преобразовать строку в LocalDate
?
Я видел такие примеры:
LocalDate dt = new LocalDate("2005-11-12");
Но мои струны такие:
2005-nov-12
Как я могу преобразовать строку в 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.
Использование Joda Time:
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
- неизменяемый класс datetime, представляющий дату без часового пояса . LocalDate
является потокобезопасным и неизменяемым , при условии, что Хронология тоже. Все стандартные классы Chronology являются поточно-ориентированными и неизменяемыми.
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
предоставляет собственный способ создания средства форматирования. Это нечувствительность к регистру, ноябрь, ноябрь и ноябрь будут обрабатываться одинаково.
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
}