第一个异常:
LocalDate parse = LocalDate.parse("2012/11/11", DateTimeFormatter.ofPattern("yyyy/MM/dd"));
System.out.println("输出: " + parse);
控制台输出结果
输出: 2012-11-11
可以明显的看出输出的结果不符合我们的预期, 我们模板应该是 yyyy/MM/dd 结果却是 yyyy-MM-dd
第二个异常:
LocalDate parse = LocalDate.parse("2012-11-11", DateTimeFormatter.ofPattern("yyyy/MM/dd"));
控制台输出
Exception in thread "main" java.time.format.DateTimeParseException: Text '2012-11-11' could not be parsed at index 4
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDate.parse(LocalDate.java:400)
at com.huntkey.rx.sceo.dateapi.Jdk8DateUtil.main(Jdk8DateUtil.java:183)
我切换了一种 传参方法, 解析不了了
第三个异常:
LocalDate parse = LocalDate.parse("2012-11-11", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println("输出: " + parse);
控制台输出
输出: 2012-11-11
这时候又正常了, 有点怪!
System.out.println("输出: " + parse); 这样直接输出是不行的,相当于调用了LocalDate.toString()方法。
然后LocalDate.toString()的源码实现是直接用“-”拼接的,如下图:
改成这样即可:
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate parse = LocalDate.parse("2012/11/11",dateTimeFormatter );
String dateStr = parse.format(dateTimeFormatter);
System.out.println("输出: " + dateStr);
之所以你会有这三个问题,是因为 LocalDate.parse这个方法的含义你可能理解错了,看源码:
LocalDate.parse这个方法的意思是把传入的日期字符串使用指定pattern模板转换为LocalDate对象,而控制台输出的格式跟你指定的pattern模板无关,
如果你要输出指定的格式,那就format一下就搞定了
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());