Joda时间 - 两个日期之间“完整”月份的差异

问题描述 投票:0回答:2

如何用joda时间计算两个日期之间的“完整”月数,减少不完整的月份?例如,我有2个日期

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

在这些日期之间有一个“完整”的月份 - 从10月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());

但也许有开箱即用的方法?

java jodatime
2个回答
0
投票

难道这不意味着您只想从每个间隔中删除一个月并在它们之间做出区别吗?

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

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

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();
© www.soinside.com 2019 - 2024. All rights reserved.