我使用Java8来解析日期并找出两个日期之间的差异。
以下是我的片段:
String date1 ="01-JAN-2017";
String date2 = "02-FEB-2017";
DateTimeFormatter df = DateTimeFormatter .ofPattern("DD-MMM-YYYY", en);
LocalDate d1 = LocalDate.parse(date1, df);
LocalDate d2 = LocalDate.parse(date2, df);
Long datediff = ChronoUnit.DAYS.between(d1,d2);
当我运行时,我得到了错误:
java.time.format.DateTimeParseException:无法在索引3解析文本
// DateTimeFormatterBuilder provides custom way to create a
// formatter
// It is Case Insensitive, Nov , nov and NOV will be treated same
DateTimeFormatter f = new DateTimeFormatterBuilder().parseCaseInsensitive()
.append(DateTimeFormatter.ofPattern("yyyy-MMM-dd")).toFormatter();
try {
LocalDate datetime = LocalDate.parse("2019-DeC-22", f);
System.out.println(datetime); // 2019-12-22
} catch (DateTimeParseException e) {
// Exception handling message/mechanism/logging as per company standard
}
以下代码有效。问题是您使用的是“JAN”而不是“Jan”。DateTimeFor质无法识别它看起来。并将模式更改为“d-MMM-yyyy”。
String date1 ="01-Jan-2017";
String date2 = "02-Feb-2017";
DateTimeFormatter df = DateTimeFormatter.ofPattern("d-MMM-yyyy");
LocalDate d1 = LocalDate.parse(date1, df);
LocalDate d2 = LocalDate.parse(date2, df);
Long datediff = ChronoUnit.DAYS.between(d1,d2);
资料来源:https://www.mkyong.com/java8/java-8-how-to-convert-string-to-localdate/
首先,检查javadoc。大写字母D表示年份字段(不是您想要的月份),大写字母Y表示基于周的年份字段(不是您想要的年份)。正确的模式是小写字母d和y。
此外,您使用的月份名称是大写的(JAN和
FEB),因此格式化程序必须不区分大小写(默认行为是只接受像
JAN和
FEB这样的值)。而且这些月份名称是英文缩写,因此您还必须使用英文语言环境来确保它正确解析名称(使用java.util.locale)。
因此,您的格式化程序应按如下方式创建:
DateTimeFormatter df = new DateTimeFormatterBuilder()
// case insensitive to parse JAN and FEB
.parseCaseInsensitive()
// add pattern
.appendPattern("dd-MMM-yyyy")
// create formatter (use English Locale to parse month names)
.toFormatter(Locale.ENGLISH);
这将使您的代码正常工作(而datediff将是32)。
下面是我的字符串:convertdate:'2016-08-18 14:27:15.103+02' 和我的代码: 我想不是太复杂,买我看不出错误。字符串中的+02可能是原因吗?
问题内容: 我有一个包含“否”和“日期”的表格。这将是动态形式。在Spring Boot JPA中进行批处理更新时,出现了“ java.time.format.DateTimeParseException:无法解析文本‘03 / 03 / 2020,03 / 03/2020’,在索引10处找到了未解析的文本”的异常 在这里,ABC是实体类,我可以以dd / mm / yyyy格式获取日期值,并将其
这适用于Java8 但在Java11中,我得到了
那么,问题是如何用和解析日期?
我正在开发新闻,在我的adapter类中,我遇到了以下异常 埃德加,[20.10.19 13:50] JAVA时间总体安排DateTimeParseException:无法在java的索引0处分析文本“20/10/2019”。时间总体安排DateTimeFormatter。java上的parseResolved0(DateTimeFormatter.java:1948)。时间总体安排DateTim
我得到:类型的ISO