字符串到 LocalDate

如何将字符串转换为 LocalDate

我见过这样的例子:

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

但我的琴弦是这样的:

2005-nov-12
277836 次浏览

您可能必须从 DateTime 转换为 LocalDate。

使用 Joda 时间:

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

在使用 Joda Time 时,应该使用 DateTimeFormatter:

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

如果使用 Java8或更高版本,请参考 Hertzi 的回答

日期时间格式化由 org.joda.time.format.DateTimeFormatter class执行。三个类提供 工厂方法创建格式化程序,这是其中之一。其他的是 ISODateTimeFormatDateTimeFormatterBuilder

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 类都是线程安全且不可变的。

爪哇时间

从 Java 1.8开始,您可以通过使用 < em > 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);

不过语法几乎是一样的。

DateTimeFormatter具有内置格式,可以直接用于解析字符序列。这是大小写敏感,11月将工作,然而11月和 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提供了创建格式化程序的自定义方法。它是不区分大小写的,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
}