如何发现给定日期的季度?

All*_*nde 32 java calendar

给定一个java.util.Date对象,我该如何查找它所在的Quarter?

假设Q1 = 1月2月3月,Q2 = 4月,5月,6月等.

Bil*_*ard 48

你可以用

int quarter = (myDate.getMonth() / 3) + 1;
Run Code Online (Sandbox Code Playgroud)

请注意,虽然getMonth已被弃用:

从JDK 1.1版开始,由Calendar.get(Calendar.MONTH)取代.

  • @Gambo Joda Time在1-12中返回monthOfYear,所以你可以使用它作为例子:`dimTimeByDay.setQuarter(((curDate.getMonthOfYear() - 1)/ 3)+ 1);` (10认同)
  • @BobAvallone在Java中,月份是0-11。 (2认同)

abd*_*nce 35

在Java 8及更高版本中,java.time类具有更简单的版本.使用LocalDateIsoFields

LocalDate.now().get(IsoFields.QUARTER_OF_YEAR)
Run Code Online (Sandbox Code Playgroud)

  • 我们的财政年度从 10 月开始,所以使用我刚刚使用的这个答案: new LocalDate().plusMonths(3).get(IsoFields.QUARTER_OF_YEAR); (2认同)

Out*_*mer 12

您将不得不编写自己的代码,因为每个企业的术语"季度"是不同的.你不能只做这样的事情:

Calendar c = /* get from somewhere */
int month = c.get(Calendar.MONTH);

return (month >= Calendar.JANUARY && month <= Calendar.MARCH)     ? "Q1" :
       (month >= Calendar.APRIL && month <= Calendar.JUNE)        ? "Q2" :
       (month >= Calendar.JULY && month <= Calendar.SEPTEMBER)    ? "Q3" :
                                                                    "Q4";
Run Code Online (Sandbox Code Playgroud)


eri*_*son 10

由于季度是本地化(西方)概念,因此请指定区域设置而不是使用平台默认值:

Calendar cal = Calendar.getInstance(Locale.US);
/* Consider whether you need to set the calendar's timezone. */
cal.setTime(date);
int month = cal.get(Calendar.MONTH); /* 0 through 11 */
int quarter = (month / 3) + 1;
Run Code Online (Sandbox Code Playgroud)

这将避免在非西方日历上获得第13个月(Calendar.UNDECIMBER),以及由于较短的月份而导致的任何偏差.

  • @obesechicken13 不,这些类没有用`@Deprecated` 注释,而是来自[Joda-Time 主页:](http://www.joda.org/joda-time/#Why_Joda_Time) 的推荐Java SE 8 之前的标准日期和时间类很差。... **请注意,从 Java SE 8 开始,要求用户迁移到 java.time (JSR-310)。**”此外,“请注意 Joda -Time 被认为是一个很大程度上“完成”的项目。没有计划进行重大改进。**如果使用 Java SE 8,请迁移到 java.time (JSR-310)。**” (2认同)

Jam*_*sev 5

如果你有

private static final int[] quarters = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4};
Run Code Online (Sandbox Code Playgroud)

那么电流quarter

private static final int thisQuarter = quarters[thisMonth];
Run Code Online (Sandbox Code Playgroud)

哪里thisMonth

private static final int thisMonth = cal.get(Calendar.MONTH);
Run Code Online (Sandbox Code Playgroud)