Java 如何在添加天数后获得Joda时间的确切月差

Java 如何在添加天数后获得Joda时间的确切月差,java,jodatime,Java,Jodatime,我想找出两次约会之间的月数。谢谢你的帮助。我正在使用下面的示例 DateMidnight start = new DateMidnight(new Date()); DateMidnight dtEndDate = start.plusDays(11); //adding Days int months = Months.monthsBetween(start, dtEndDate).getMonths(); System.out.println("Months between "

我想找出两次约会之间的月数。谢谢你的帮助。我正在使用下面的示例

DateMidnight start = new DateMidnight(new Date()); 
DateMidnight dtEndDate  = start.plusDays(11);   //adding Days

int months = Months.monthsBetween(start, dtEndDate).getMonths();

System.out.println("Months between " +
                    start.toString("yyyy-MM-dd") + " and " +
                    dtEndDate.toString("yyyy-MM-dd") + " = " +
                    months + " month(s)");
上述代码在2013年2月18日至2013年3月01日期间返回“0”

我不能将+1添加到月份中,因为我需要查找同一个月的差异,同时我需要查找两个经过的时段之间的差异,即“2012-12-04”和“2013-1-06”之间的差异应返回-1

scenario1:

date1:  2013-02-18
    date1.plusDays(11);
date2:  2013-03-01
Output : 0 month(s)   //but I need as 1 Month

scenario2:
date1:  2013-02-18
    date1.plusDays(1);
date2:  2013-02-19
Output : 0 month(s)   //returns correctly exactly what I need

scenario3:
date1:  2013-03-18
date2:  2013-02-19
Output should be : -1 month(s)
比较前,将两个日期的月日设置为1:

startModified = start.withDayOfMonth(1); 
endModified = end.withDayOfMonth(1);
int months = Months.monthsBetween(startModified, endModified).getMonths();
比较前,将两个日期的月日设置为1:

startModified = start.withDayOfMonth(1); 
endModified = end.withDayOfMonth(1);
int months = Months.monthsBetween(startModified, endModified).getMonths();

感谢您的回复,如果我使用DateTime而不是DateMidnight,有什么区别吗?当我使用DateMidnight时,它起作用,但不使用DateTime,那么您的日期必须具有时间组件。DateMidnight将所有时间正常化为午夜。如果您使用DateTime,并且您的日期中有不同的时间,它将改变结果,因为2012年3月1日下午4点到2012年4月1日下午1点之间的月数将少于一个月,因为只有下午4点正好是一个月。再次感谢您的解释。我不知道为什么下面给出的“0”个月DateTime start=new DateTime 2013-02-22T16:15:53.113Z;DateTime end=newdatetime2013-03-28T00:00:00.000Z;因为一旦您将“月日”设置为1,它将变为2013-02-01下午4点到2013-03-01午夜,因此在一个整月过去之前还有16个小时,因此月份为0。Joda Time中与午夜相关的方法不再被其创建者推荐。请使用更新的方法。感谢您的回复,如果我使用DateTime而不是DateMidnight,有什么区别吗?当我使用DateMidnight时,它起作用,但不使用DateTime,那么您的日期必须具有时间组件。DateMidnight将所有时间正常化为午夜。如果您使用DateTime,并且您的日期中有不同的时间,它将改变结果,因为2012年3月1日下午4点到2012年4月1日下午1点之间的月数将少于一个月,因为只有下午4点正好是一个月。再次感谢您的解释。我不知道为什么下面给出的“0”个月DateTime start=new DateTime 2013-02-22T16:15:53.113Z;DateTime end=newdatetime2013-03-28T00:00:00.000Z;因为一旦您将“月日”设置为1,它将变为2013-02-01下午4点到2013-03-01午夜,因此在一个整月过去之前还有16个小时,因此月份为0。Joda Time中与午夜相关的方法不再被其创建者推荐。使用更新的方法。根据你的定义,一个月到底是多少?这段时间跨越一个月的边界有多少次?2013-02-28二月底到2013-03-01三月初算一个月吗?根据你的定义,一个月到底是什么?这段时间跨越一个月的边界有多少次?2013-02-28二月底到2013-03-01三月初算一个月吗?