Javaカレンダーを使用して日付からX日を差し引く簡単な方法を知っている人はいますか?
Java で日付から X 日を直接減算できる関数を見つけることができませんでした。誰かが私を正しい方向に向けることができますか?
Javaカレンダーを使用して日付からX日を差し引く簡単な方法を知っている人はいますか?
Java で日付から X 日を直接減算できる関数を見つけることができませんでした。誰かが私を正しい方向に向けることができますか?
ここのドキュメントから取得:
カレンダーの規則に基づいて、指定されたカレンダー フィールドに指定された時間を加算または減算します。たとえば、カレンダーの現在の時刻から 5 日を減算するには、次のように呼び出します。
Calendar calendar = Calendar.getInstance(); // this would default to now calendar.add(Calendar.DAY_OF_MONTH, -5).
メソッドを使用し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
。必要に応じて、どちらの機能も簡単に変更して別の方法で実行できます。
int x = -1;
Calendar cal = ...;
cal.add(Calendar.DATE, x);
addDays
Eli が提案したように自分で作成する代わりに、 ApacheDateUtils
から使用することをお勧めします。プロジェクトの複数の場所で使用する必要がある場合に特に便利です。
API は次のように述べています。
addDays(Date date, int amount)
新しいオブジェクトを返す日付に日数を追加します。
新しいオブジェクトを返しDate
、以前のオブジェクト自体に変更を加えないことに注意してください。
誰かが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
}
Eli Courtwright の 2 番目の解決策は間違っています。次のようにする必要があります。
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -days);
date.setTime(c.getTime().getTime());