我正在尝试从某个季度获得月数。使用下面的代码,我从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++;
}
最佳答案
通过查看getFrom
的IsoFields.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());
}