Java 字符串到LocalDate
如何将字符串转换为Java 字符串到LocalDate,java,jodatime,Java,Jodatime,如何将字符串转换为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("2
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();
使用Joda Time时,应使用
DateTimeFormatter
:
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);
如果使用Java 8或更高版本,请参阅
org.joda.time.format.DateTimeFormatter类执行日期时间格式化。三个类提供了创建格式化程序的工厂方法,这是一个。其他的是ISODateTimeFormat
和DateTimeFormatterBuilder
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);
final org.joda.time.LocalDate类
是一个不可变的datetime类,表示没有时区的日期LocalDate
是线程安全且不可变的,前提是年表也是。提供的所有标准编年史类都是线程安全且不可变的 java.time
由于Java1.8,您可以通过使用类来实现这一点,而无需额外的库。看
但是语法几乎相同。DateTimeFormatter
具有内置格式,可直接用于解析字符序列。它区分大小写,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
}
还提交了“yyyy MMM dd”格式的编辑。YYYY是纪年,(更离奇的是)DD是一年中的一天。答案稍有错误。。。对于joda time,要使用的类是DateTimeFormat,而不是DateTimeFormatter。换句话说,调用模式的DateTimeFormat(“yyyy-MM-dd”).parseLocalDate(您的输入);java.time.format.DateTimeParseException:无法在索引5处解析文本“2005-nov-12”。发生这种情况是因为您的默认区域设置要求“nov”的“N”为大写。有关此方法的详细讨论,请参阅类似问题。欢迎使用此方法,我们感谢您的输入!请编辑您的答案,并提供更多的解释,它与问题的关系如何,您的解决方案来自何处,为什么有效?有关更多指导,请注意,这个答案是指Joda,而不是JavaSE。
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
}