我正在尝试从某个季度获得月数。使用下面的代码,我从LocalDate.now()实例成功获取了当前季度的月份名称。

我怎样才能从四分之一的String(例如“ Q1”)中获得四分之一的月份?

int monthInt = Month.from(LocalDate.now()).firstMonthOfQuarter().getValue();
      for (int j = 1; j <= 3; j++) { //for each month in quarter
          System.out.println(Month.of(monthInt).name()); //January, February, March
          monthInt++;
      }

最佳答案

通过查看getFromIsoFields.QUARTER_OF_YEAR声明,我们可以发现JDK如何计算季度:

public long getFrom(TemporalAccessor temporal) {
    if (isSupportedBy(temporal) == false) {
        throw new UnsupportedTemporalTypeException("Unsupported field: QuarterOfYear");
    }
    long moy = temporal.getLong(MONTH_OF_YEAR);
    return ((moy + 2) / 3);
}


注意它如何使用公式quarter = (moy + 2) / 3。因此,要找到一个季度的开始月份,我们只需要按照moy-moy = quarter * 3 - 2重新排列。

您可以编写这样的方法:

private static List<String> monthNamesFromQuarter(int quarter) {
    // you can do the validation of quarter yourself
    int start = quarter * 3 - 2;
    return IntStream.range(start, start + 3)
            .mapToObj(Month::of)
            .map(Month::name)
            .collect(Collectors.toList());
}

10-08 20:05