2010-07-25 174 views
4

我想获得两个Java Date对象之间的区别。我已经使用了乔达时间库。但问题是,我得到的天差异比实际的天差异更大。两个Java日期之间的差异?

这里是我的代码片段:

DateFormat formatter = new SimpleDateFormat("mm/dd/yyyy"); 

Date someDate=new Date(); 
Date today = Calendar.getInstance().getTime(); 

try  { 
    someDate = formatter.parse("06/22/2010"); 
} 
catch(ParseException pe) { 
    System.out.println("Parser Exception"); 
} 

int days = Days.daysBetween(new DateTime(someDate), new DateTime(today)).getDays(); 

System.out.println(" Days Between " + someDate + " : " + today + " - " + days); 

这里是我的输出:

Days Between Fri Jan 22 00:06:00 IST 2010 : Sun Jul 25 19:27:01 IST 2010 - 184 

这里,为什么它以 “06/22/2010” 为1月22日?有没有人面临类似的问题?

帮助我的朋友..感谢名单提前..

回答

12

月是MM

你的情况:

日期格式格式化=新 的SimpleDateFormat(” MM/DD/YYYY “);

3

mm =>分钟,而不是几个月 - 您需要MM几个月 - 这将解决您的Jan问题!

4

您的图案稍有缺陷。 mm被解析为分钟,您正在寻找MM这是的月份

19

看起来像mm是指分钟,而不是几个月,这是MM。请检查here以查看适当的刻字清单:)

+0

请刷新链接 – 2012-04-13 11:29:38

+0

@ShahzadImam:现在链接指向新版本的JavaDocs。 – npinti 2012-04-13 11:44:53

+0

谢谢。解决了问题..... mm – 2012-04-13 11:51:28

2

其他答案正确解决了您的具体问题。

LocalDate

但有一个更大的解决方案。如果您只从日期开始,没有时间和时区,那么您应该使用LocalDate类,而不是DateTime

时区

您的代码忽略了时区的关键问题。在尝试确定“今天”时,即使对于LocalDate,时区也很重要。你想要在蒙特利尔还是巴黎的今天约会?一个新的一天早些时候在巴黎亮相。当您省略时区时,您将获得JVM当前的默认时区。

Joda-Time Can Parse

此外,让Joda-Time进行解析。根本不需要使用java.util.Date & .Calendar。 Joda时间的格式化字符与java.util.Date几乎相同,但不完全如此,以便征求文档的意见。在这种情况下它是相同的。

DateTimeFormatter formatter = DateTimeFormat.forPattern("MM/dd/yyyy"); 
LocalDate past = formatter.parseLocalDate("06/22/2010"); 
DateTimeZone = DateTimeZone.forID("America/Montreal"): // match time zone intended for that input string. 
int days = Days.daysBetween(past, LocalDate.now(timeZone));