194

Javaカレンダーを使用して日付からX日を差し引く簡単な方法を知っている人はいますか?

Java で日付から X 日を直接減算できる関数を見つけることができませんでした。誰かが私を正しい方向に向けることができますか?

4

11 に答える 11

329

ここのドキュメントから取得:

カレンダーの規則に基づいて、指定されたカレンダー フィールドに指定された時間を加算または減算します。たとえば、カレンダーの現在の時刻から 5 日を減算するには、次のように呼び出します。

Calendar calendar = Calendar.getInstance(); // this would default to now
calendar.add(Calendar.DAY_OF_MONTH, -5).
于 2008-10-17T14:17:06.800 に答える
38

メソッドを使用しaddて、負の数を渡すことができます。Calendarただし、次のようなクラスを使用しない、より単純なメソッドを作成することもできます。

public static void addDays(Date d, int days)
{
    d.setTime( d.getTime() + (long)days*1000*60*60*24 );
}

これは、日付のタイムスタンプ値 (エポックからのミリ秒) を取得し、適切なミリ秒数を追加します。days パラメータに負の整数を渡して減算を行うことができます。これは、「適切な」カレンダー ソリューションよりも簡単です。

public static void addDays(Date d, int days)
{
    Calendar c = Calendar.getInstance();
    c.setTime(d);
    c.add(Calendar.DATE, days);
    d.setTime( c.getTime().getTime() );
}

これらのソリューションは両方ともDate、完全に新しい を返すのではなく、パラメーターとして渡されるオブジェクトを変更することに注意してくださいDate。必要に応じて、どちらの機能も簡単に変更して別の方法で実行できます。

于 2008-10-17T14:22:03.373 に答える
36

アンソンの答えは単純なケースでは問題なく機能しますが、より複雑な日付計算を行う場合は、Joda Timeを確認することをお勧めします。それはあなたの人生をずっと楽にしてくれます。

参考までに Joda Time でできること

DateTime dt = new DateTime();
DateTime fiveDaysEarlier = dt.minusDays(5);
于 2008-10-17T14:24:34.273 に答える
8
int x = -1;
Calendar cal = ...;
cal.add(Calendar.DATE, x);

見るjava.util.Calendar#add(int,int)

于 2008-10-17T14:17:49.183 に答える
5

addDaysEli が提案したように自分で作成する代わりに、 ApacheDateUtilsから使用することをお勧めします。プロジェクトの複数の場所で使用する必要がある場合に特に便利です。

API は次のように述べています。

addDays(Date date, int amount)

新しいオブジェクトを返す日付に日数を追加します。

新しいオブジェクトを返しDate、以前のオブジェクト自体に変更を加えないことに注意してください。

于 2012-08-13T12:29:32.743 に答える
1

誰かがJodaTimeを勧めたので-私はこのCalendarDateクラス を使用していますhttp://calendardate.sourceforge.net

これはJodaTimeとはやや競合するプロジェクトですが、2つのクラスだけではるかに基本的です。プロジェクトよりも大きなパッケージを使用したくなかったので、非常に便利で、必要なものに最適でした。Javaの対応するものとは異なり、その最小単位は日であるため、実際には日付です(ミリ秒などになりません)。日付を作成したら、減算するために行うのは、myDay.addDays(-5)のように5日前に戻すことだけです。これを使用して、曜日などを見つけることができます。もう一つの例:

CalendarDate someDay = new CalendarDate(2011, 10, 27);
CalendarDate someLaterDay = today.addDays(77);

と:

//print 4 previous days of the week and today
String dayLabel = "";
CalendarDate today = new CalendarDate(TimeZone.getDefault());
CalendarDateFormat cdf = new CalendarDateFormat("EEE");//day of the week like "Mon"
CalendarDate currDay = today.addDays(-4);
while(!currDay.isAfter(today)) {
    dayLabel = cdf.format(currDay);
    if (currDay.equals(today))
        dayLabel = "Today";//print "Today" instead of the weekday name
    System.out.println(dayLabel);
    currDay = currDay.addDays(1);//go to next day
}
于 2011-10-27T20:33:46.667 に答える
0

Eli Courtwright の 2 番目の解決策は間違っています。次のようにする必要があります。

Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -days);
date.setTime(c.getTime().getTime());
于 2009-09-25T09:30:16.083 に答える