47

java.util.Date オブジェクトが与えられた場合、それがどの四半期にあるかを見つけるにはどうすればよいですか?

第 1 四半期 = 1 月 2 月 3 月、第 2 四半期 = 4 月、5 月、6 月などと仮定します。

4

14 に答える 14

64

Java 8 以降、四半期はjava.timeパッケージのクラスを使用してフィールドとしてアクセスできます。

import java.time.LocalDate;
import java.time.temporal.IsoFields;

LocalDate myLocal = LocalDate.now();
quarter = myLocal.get(IsoFields.QUARTER_OF_YEAR);

古いバージョンの Java では、以下を使用できます。

import java.util.Date;

Date myDate = new Date();
int quarter = (myDate.getMonth() / 3) + 1;

getMonthは早い段階で廃止されましたが、注意してください。

JDK バージョン 1.1 以降、Calendar.get(Calendar.MONTH) に置き換えられました。

Calendar代わりに、次のようなオブジェクトを使用できます。

import java.util.Calendar;
import java.util.GregorianCalendar;

Calendar myCal = new GregorianCalendar();
int quarter = (myCal.get(Calendar.MONTH) / 3) + 1;
于 2008-11-19T17:18:43.220 に答える
52

Java 8 以降のjava.timeクラスには、より単純なバージョンがあります。使用LocalDateしてIsoFields

LocalDate.now().get(IsoFields.QUARTER_OF_YEAR)
于 2016-04-21T09:31:51.590 に答える
14

「四半期」という用語はビジネスごとに異なるため、独自のコードを作成する必要があります。次のようなことはできませんか?

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";
于 2008-11-19T17:20:06.710 に答える
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;

これにより、西暦以外の暦で 13 番目の月 (Calendar.UNDECIMBER) を取得したり、月が短いために発生したスキューを回避したりできます。

于 2008-11-19T17:23:21.587 に答える
5

あなたが持っている場合

private static final int[] quarters = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4};

すると電流quarter

private static final int thisQuarter = quarters[thisMonth];

どこthisMonthですか

private static final int thisMonth = cal.get(Calendar.MONTH);
于 2013-06-26T00:43:11.800 に答える
3
于 2016-09-02T19:11:25.840 に答える
1

JFreeChartにはQuarterクラスがあります。興味がある場合は、javadocを確認してください。実装を確認したい場合は、 SourceForgeからソースを入手することもできます。

于 2008-11-19T17:30:26.470 に答える
1

thisMonthが int ではなく、少なくとも float または double であることを確認してください。

String quarter = thisMonth/3 <= 1 ? "Q1" : thisMonth/3 <= 2 ? "Q2" : thisMonth/3 <= 3 ? "Q3" : "Q4";

よろしく、 MS

于 2015-04-24T17:47:11.197 に答える
1

ここに良い解決策がありますが、四半期は会社/業界によっても変更される可能性があることを覚えておいてください. 四半期が別の 3 か月になる場合もあります。

カレンダー クラスを変換するユーティリティ関数を記述するよりも、タスクに合わせてカスタマイズするために、カレンダー クラスを拡張またはカプセル化することをお勧めします。あなたのアプリケーションはおそらく、新しいカレンダー クラスの他の用途を見つけることができるほど十分に複雑です。

于 2008-11-19T18:06:09.020 に答える
0

java8 では、フォーマッタを使用できます。

import java.time.format.DateTimeFormatter
import java.time.LocalDate

println("withQuarter: " + LocalDate.of("2016".toInt,"07".toInt,1).format(DateTimeFormatter.ofPattern("yyyyQMM")))

withQuarter: 2016 3 07

于 2016-09-12T08:25:12.853 に答える