java.util.Date オブジェクトが与えられた場合、それがどの四半期にあるかを見つけるにはどうすればよいですか?
第 1 四半期 = 1 月 2 月 3 月、第 2 四半期 = 4 月、5 月、6 月などと仮定します。
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;
「四半期」という用語はビジネスごとに異なるため、独自のコードを作成する必要があります。次のようなことはできませんか?
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";
四半期はローカライズされた (西洋の) 概念であるため、プラットフォームのデフォルトを使用するのではなく、ロケールを指定します。
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) を取得したり、月が短いために発生したスキューを回避したりできます。
あなたが持っている場合
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);
JFreeChartにはQuarterクラスがあります。興味がある場合は、javadocを確認してください。実装を確認したい場合は、 SourceForgeからソースを入手することもできます。
thisMonth
が int ではなく、少なくとも float または double であることを確認してください。
String quarter = thisMonth/3 <= 1 ? "Q1" : thisMonth/3 <= 2 ? "Q2" : thisMonth/3 <= 3 ? "Q3" : "Q4";
よろしく、 MS
ここに良い解決策がありますが、四半期は会社/業界によっても変更される可能性があることを覚えておいてください. 四半期が別の 3 か月になる場合もあります。
カレンダー クラスを変換するユーティリティ関数を記述するよりも、タスクに合わせてカスタマイズするために、カレンダー クラスを拡張またはカプセル化することをお勧めします。あなたのアプリケーションはおそらく、新しいカレンダー クラスの他の用途を見つけることができるほど十分に複雑です。
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