我想计算两个日期之间的天数,月数和年数,所以我使用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指的是:日期d2 =新日期(“2014-12-12”);
如何在不更改此格式的情况下解决此问题?
答案 0 :(得分:3)
您的问题不是从JDK Date转换为Joda DateTime。它是将字符串解析为JDK日期。
Date d2=new Date("2014-12-12");
是一个不推荐使用的构造函数调用。您可能应该使用DateFormat将日期字符串解析为Date
,或者使用parse方法和类似的DateTimeFormatter将其解析为Joda DateTime
。
这些解析方法允许您明确指定您期望的格式,而不是依赖于默认的Date.parse()
,它会尝试从数据中找出格式。特别是为什么它在这种情况下失败了我不能说,但这是你不应该使用的代码。它已被弃用多年。