一年有4个季度(通常表示为Q1、Q2、Q3和Q4),每个季度有3个月。如果我们认为一月是0,二月是1,……,十二月是11,那么我们可以观察到一月/3=0,二月/3=0,三月/3=0,因此0可以代表Q1。接下来,3/3=1,4/3=1,5/3=1,所以1可以代表Q2。基于同样的逻辑,6/3=2,7/3=2,8/3=2,所以2可以代表Q3。最后,9/3=3,10/3=3,11/3=3,所以3代表Q4。
根据这个陈述和Calendar API,我们可以得到以下代码:
public static String quarter(Date date) {
String[] quarters = {"Q1", "Q2", "Q3", "Q4"};
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int quarter = calendar.get(Calendar.MONTH) / 3;
return quarters[quarter];
}
但是,从JDK 8开始,我们可以依赖于java.time.temporal.IsoFields。这个类包含遵循ISO-8601标准日历系统的字段(和单位)。在这些项目中,我们有基于周的年份,以及我们感兴趣的,一年中的季度。这次,让我们返回季度作为整数:
public static int quarter(Date date) {
LocalDate localDate = date.toInstant()
.atZone(ZoneId.systemDefault()).toLocalDate();
return localDate.get(IsoFields.QUARTER_OF_YEAR);
}