我如何将字符串转换为LocalDate
?
我看过类似的例子:
LocalDate dt = new LocalDate("2005-11-12");
但是我的字符串像:
2005-nov-12
我如何将字符串转换为LocalDate
?
我看过类似的例子:
LocalDate dt = new LocalDate("2005-11-12");
但是我的字符串像:
2005-nov-12
Answers:
使用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。
使用乔达时间:
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也是如此。提供的所有标准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
提供自定义方式来创建格式化程序。如果不区分大小写,则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
}