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