两个Java日期之间的天数差异?

我想获得两个Java Date对象之间的区别。 我使用过Joda-Time库。 但问题是,我得到的天差异大于实际天差。

这是我的代码片段:

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日? 有没有人面临类似的问题?

帮帮我的朋友.. Thanx提前..

月是MM

在你的情况下:

DateFormat formatter = new SimpleDateFormat(“ MM / dd / yyyy”);

似乎mm指的是分钟,而不是几个月,这是MM 。 请点击这里查看相应字母列表:)

您的模式略有缺陷。 mm被解析为小时分钟 ,你正在寻找一年中的 MM

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

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

LocalDate

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

时区

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

Joda-Time可以解析

此外,让Joda-Time进行解析。 根本不需要使用java.util.Date和.Calendar。 Joda-time的格式化字符几乎与java.util.Date相同,但并不完全如此,请咨询doc。 在这种情况下,它是相同的。

 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 ) );