0

ユーザーが日付を選択し、次に日付を取得する期間のタイプのチェックボックスを選択する日付ピッカーがあります。例えば:

ユーザーは 11 月の 1 を選択し、チェックボックス「月」を選択します。この場合、終了日は 1 増加します。これは単純に聞こえるかもしれませんが、ゆっくりと私を悩ませ始めます!

問題は、Java にはこの種の作業に適した優れた日付オブジェクトがないため、Calendar を使用すると思ったのですが、次の例のようにカレンダーの日付をインクリメントするのは簡単ではありません。

endDate.set(startDate.YEAR, startDate.MONTH+1, startDate.DATE);

理論的には、これにより、開始日よりも 1 大きい月が 1 ずつ増えます。これは、12 月に月を 1 増やすと、12 月からの EXECPT 月の約 90% で機能し、整数月は 13 を返しますstartDate.DATE;startDate.Year;

私の質問は、これを行う簡単な方法はありませんか? たくさんのIf文を作ることができましたが、それはちょっと冗長だと思います.

4

3 に答える 3

2

の使用add方法java.util.Calendar

endDate.set(startDate.YEAR, startDate.MONTH, startDate.DATE);
if(some_condition) {
   endDate.add(Calendar.MONTH, 1);
}
于 2012-11-23T12:35:56.800 に答える
1

ここでの標準的な推奨事項は、Joda-Timeを確認することです(詳細については、ここを参照してください)。これは、標準のJava日付/フォーマットAPIを悩ませているスレッドの問題がなく、はるかに一貫性のある/対応可能なAPIであるため、広く使用され、受け入れられています。

あなたが上で欲しいものに関して、私は次のようなものを提案します:

LocalDate d = ...
LocalDate nd = d.plusMonths(1);

上記は、月/年のロールオーバーを正しく処理します。

于 2012-11-23T12:34:24.763 に答える
1

を使用Calendar.add()して、カレンダーの値に値を追加できます。たとえばCalendar.add(Calendar.MONTH, 1)、これにより 1 か月が追加され、1 月が 12 月より後であることを考慮に入れることができます。

于 2012-11-23T12:35:44.943 に答える