【问题标题】:Exception thrown when parsing data解析数据时抛出异常
【发布时间】:2020-11-20 02:43:36
【问题描述】:

对不起,如果这是一个菜鸟问题,但我有以下问题:每次我尝试将字符串解析为具有特定格式 (ddMMyyy) 的 LocalDate 类型时,我都会收到以下消息:

Exception in thread "main" java.time.format.DateTimeParseException: Text '06071994' could not be parsed at index 2
    at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
    at java.base/java.time.LocalDate.parse(LocalDate.java:428)
    at jujj.main(jujj.java:7)

Process finished with exit code 1

起初我以为我在代码的不同部分做错了什么,我试图隔离我正在解析的部分来测试它,但没有运气。这是测试代码:

String in = "06071994";
DateTimeFormatter format = DateTimeFormatter.ofPattern ( "dd MM yyyy" );
LocalDate BirthDay = LocalDate.parse ( in, format );
System.out.println ( in );

后来编辑:我尝试了不同的格式:“dd/MM/yyyy”、“dd-MM-yyyy”、“ddMMyyyy”,它们仍然没有工作。

【问题讨论】:

  • 也许你必须使用模式“ddMMyyyy”而不是“dd MMM yyyy”?我认为格式化程序希望你的模式的空格以你使用它的方式出现在目标字符串中。
  • MMM代表JAN、FEB等,用MM
  • 嘿,谢谢或快速响应! :D 我试着这样使用它,它给了我同样的信息。我还尝试使用“dd/MM/yyyÿ”和“dd-MM-yyyy”模式。可悲的是,它仍然给了我同样的信息。公平地说,我的笔记本电脑有点旧,并且在 Windows 7 上运行,我只是出现了奇怪的错误,然后我什么也不做,只好重新启动它。然而,这一次似乎没有任何解决办法。
  • 我也尝试过只使用 MM,但仍然收到相同的消息。
  • 您可能无意中在字符串"06071994" 中输入了非打印字符。尝试完全删除该行并重新输入。

标签: java parsing localdate


【解决方案1】:

显然,您的模式与您的字符串不匹配。

您的字符串不包含空格,而您的模式包含空格。

您的字符串包含一个两位数的月份,而您的模式期望月份名称的三个字母缩写。

试试下面的代码:

String in = "06071994";
DateTimeFormatter format = DateTimeFormatter.ofPattern ( "ddMMyyyy" );
LocalDate BirthDay = LocalDate.parse ( in, format );
System.out.println ( BirthDay );

所有有效的模式都在DateTimeFormatter类的javadoc中详细解释了

【讨论】:

    【解决方案2】:
    import java.text.ParseException;
    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    
    public class FormatDate {
    
    public static void main(String... args) throws ParseException {
        String in = "06071994";
        DateTimeFormatter format = DateTimeFormatter.ofPattern("ddMMyyyy");
        LocalDate BirthDay = LocalDate.parse(in, format);
        System.out.println(BirthDay);
      }
    }
    

    编辑 1:代码的问题是输入格式为 ddMMyyyy(06071994),格式为 dd MM yyyy(应该是 ddMMyyyy)。所以现在解析器看到要解析的输入和格式不一样,因此会抛出错误。

    【讨论】:

    • 如果您解释了更改的内容和原因,这将是一个更好的答案。代码转储本身对未来的读者不是很有用,对帮助人们学习也没有多大帮助。
    • 感谢您的反馈。我已经解释了问题,如果不能理解,请告诉我
    猜你喜欢
    • 1970-01-01
    • 2020-04-17
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    相关资源
    最近更新 更多