乔达时间-两个日期之间“完成”月份的差额

时间:2018-09-07 10:47:14

标签: java jodatime

如何计算两个日期之间具有“乔达”时间的“满”月数,而不是不完整的月数? 例如,我有两个日期

LocalDate from = new LocalDate (2018, 9, 10);
LocalDate to = new LocalDate (2018, 11, 15);

在这些日期之间,有一个“完整”月份-十月1至31。 因此,我想通过删除“不完整”月份(9月和11月)获得数字“ 1”

我需要这样的东西

System.out.println(Months.monthsBetween(from, to).getMonths()); // returns 2
System.out.println(Months.**completed**MonthsBetween(from, to).getMonths()); // returns 1

UPD 1。 我可以实现我想要的目标,如下所示:

LocalDate from = new LocalDate (2018, 9, 10);
LocalDate to = new LocalDate (2018, 11, 15);

if (to.getDayOfMonth() != 1)
    from = from.plusMonths(1).withDayOfMonth(1);
if (to.getDayOfMonth() != 1)
    to = to.withDayOfMonth(1);

System.out.println(Months.monthsBetween(from, to).getMonths());

但是也许有一种现成的方法?

2 个答案:

答案 0 :(得分:0)

这是否意味着您只是想从每个间隔中删除一个月并在它们之间进行区别?

    LocalDate fromMinusOne = from.minus(Months.ONE);
    LocalDate toMinusOne = to.minus(Months.ONE);

    System.out.println(Months.monthsBetween(fromMinusOne, toMinusOne).getMonths());

答案 1 :(得分:0)

Joda Time提供了在两个日期之间提取daysmonthsyears的方法。创建日期的两个实例。

DateTime startDate = DateTime.parse("1970-01-01", DateTimeFormat.forPattern("yyyy-MM-dd"))
DateTime endDate = DateTime.parse("2015-02-25", DateTimeFormat.forPattern("yyyy-MM-dd"))

您也可以在LocalDate(而不是DateTime)中创建日期实例。

现在,可以轻松找到上述两个日期之间的完整月份,

int months = Months.monthsBetween(startDate.withDayOfMonth(1), endDate.withDayOfMonth(1)).getMonths()

几天,

int days = Days.daysBetween(startDate, endDate).getDays()

两个月之间的日期差异

多年来,

int years = Years.yearsBetween(startDate, endDate).getYears();