日期LocalDate.parse方法调用异常问题

第一个异常:

        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()的源码实现是直接用“-”拼接的,如下图:
img
改成这样即可:

        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这个方法的含义你可能理解错了,看源码:
img
LocalDate.parse这个方法的意思是把传入的日期字符串使用指定pattern模板转换为LocalDate对象,而控制台输出的格式跟你指定的pattern模板无关,
如果你要输出指定的格式,那就format一下就搞定了

关于java:LocalDate异常错误 | 码农家园 LocalDate exception error[cc lang=java]import java.time.LocalDate;import java.time.format.DateTimeFormatter;import java.util.Locale;public class So... https://www.codenong.com/46486822/

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());