如何在Java中找到任何包含季度的ChronoUnit的第一天?



我想要实现的是一个简单的方法,它将使用一个ChronoUnit +持续时间来返回以下ChronoUnit的第一天。

背景:


ChronoUnit unit = ChronoUnit.MONTHS(WEEKS, QUARTERS, YEARS, DAYS); // Supplied by an enum instance
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate start = LocalDate.parse("1990-12-15",df);
LocalDate end = LocalDate.parse("1991-06-07",df);
LocalDate lastCompoundDate = end;
LocalDate current = start;
ArrayList compoundingDates = new ArrayList<LocalDate>();
while (current.isBefore(end)) {
compoundingDates.add(current);
current = findFirstDateOf(current.plus(duration, unit), unit);

}
compoundingDates.add(end)
return CompoundingDates

不确定我对实现的最佳选择是什么,我在谷歌上搜索了一下,似乎对于标准的java类来说,获得一周和每月的第一天可能是微不足道的,但是季度有点棘手。我发现有人建议这样做:https://www.threeten.org/threeten-extra/,以及,但不知道如果这是一种方式,因为它没有提供一个清晰的界面,我正在寻找。

简而言之,我只是想避免根据计时单位的类型做所有的if-elif-elif,并想知道是否有一种干净,简单的方法来表达java。如果这是不可能的,至少可能有一个干净的方法来做所有的事情,但是硬币?

您可以使用Monthenum的firstMonthOfQuarter方法来帮助您将LocalDate调整到季度开始。使用它的解决方案可能如下所示:

public static LocalDate startOfQuarter(LocalDate arg) {
Month firstMonthOfQuarter = arg.getMonth().firstMonthOfQuarter();
return arg.withDayOfMonth(1).withMonth(firstMonthOfQuarter.getValue());
}

相关内容

  • 没有找到相关文章

最新更新