给我一首歌的时间@
2021-08-21 11:43
采纳率: 50%
浏览 55
已结题

日期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

这时候又正常了, 有点怪!

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 奔腾的野马 2021-08-21 12:43
    已采纳

    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一下就搞定了

    评论
    解决 2 无用
    打赏 举报
查看更多回答(2条)

相关推荐 更多相似问题