【发布时间】:2012-02-03 11:43:56
【问题描述】:
如何将字符串转换为LocalDate?
我见过这样的例子:
LocalDate dt = new LocalDate("2005-11-12");
但我的字符串是这样的:
2005-nov-12
【问题讨论】:
如何将字符串转换为LocalDate?
我见过这样的例子:
LocalDate dt = new LocalDate("2005-11-12");
但我的字符串是这样的:
2005-nov-12
【问题讨论】:
您可能必须从 DateTime 转到 LocalDate。
使用 Joda 时间:
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();
【讨论】:
DateTimeFormatter 具有可直接用于解析字符序列的内置格式。它是区分大小写的,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
}
【讨论】:
当你使用 Joda Time 时,你应该使用DateTimeFormatter:
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);
如果使用 Java 8 或更高版本,请参考hertzi's answer
【讨论】:
从 Java 1.8 开始,您无需额外的库即可通过使用 java.time 类实现此目的。见Tutorial。
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);
虽然语法几乎相同。
【讨论】:
日期时间格式由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 是线程安全且不可变的,前提是年表也是如此。提供的所有标准 Chronology 类都是线程安全且不可变的。
【讨论】: