将java.util.Date转换为org.joda.time.DateTime时出现非法参数异常



我想计算两个日期之间的天数,月份和年份,所以我使用JodaTime。如果我的日期类型为org.joda.time.DateTime,我可以完美地获得结果。但是,用户插入的日期类型为日期(格式为"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");

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

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

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

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

这些解析方法允许您显式指定期望的格式,而不是依赖于默认的Date.parse(),后者试图从数据中找出格式。具体为什么它在这个例子中失败,我不能说,但这是你不应该使用的代码。

最新更新