【问题标题】:IllegalArgumentException while converting java.util.Date to org.joda.time.DateTime将 java.util.Date 转换为 org.joda.time.DateTime 时出现 IllegalArgumentException
【发布时间】:2013-05-28 20:18:13
【问题描述】:

我想计算两个日期之间的天数、月数和年数,所以我使用 JodaTime。如果我的日期是 org.joda.time.DateTime 类型,我可以完美地得到结果。但是,用户插入的日期是 Date 类型(格式“yyy-mm-dd”),我在整个项目中使用这种类型和这种格式。所以我写了这段代码:

 Date d1=new Date("2013-09-11"); 
       Date d2=new Date("2014-12-12"); 
       DateTime dt1 = new DateTime(d1);
       DateTime dt2=new DateTime(d2);
       CalculCalendar clcd=new CalculCalendar(dt1,dt2);
       System.out.println(clcd.getNbjours(dt1, dt2)+" "+ clcd.getNbmois(dt1, dt2)+" "+ clcd.getNbyears(dt1, dt2));

当我运行它时,我得到这个错误:

Exception in thread "main" java.lang.IllegalArgumentException
    at java.util.Date.parse(Unknown Source)
    at java.util.Date.<init>(Unknown Source)
    at CalendarDemo.main(CalendarDemo.java:50)

CalendarDemo.java:50 指的是:Date d2=new Date("2014-12-12");

如何在不改变这种格式的情况下解决这个问题?

【问题讨论】:

    标签: jodatime java.util.date


    【解决方案1】:

    您的问题根本不在于将 JDK Date 转换为 Joda DateTime。它是将字符串解析为 JDK 日期。

    Date d2=new Date("2014-12-12"); 
    

    是一个已弃用的构造函数调用。您可能应该使用DateFormat 将您的日期字符串解析为Date,或者使用其parse 方法和类似的DateTimeFormatter 将其直接解析为Joda 的DateTime

    这些解析方法允许您明确指定您期望的格式,而不是依赖于默认的Date.parse(),它试图从数据中找出格式。具体为什么在这种情况下它失败了,我不能说,但这是你无论如何都不应该使用的代码。它已被弃用多年。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-20
      • 2012-08-21
      • 2014-02-10
      • 2011-08-29
      • 2019-08-03
      • 2019-07-22
      • 2016-02-14
      相关资源
      最近更新 更多