Взятый от документы здесь :
Добавляет или вычитает указанное количество времени к данному календарному полю, на основе правил календаря. Например, для вычитания 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 );
}
, Это получает значение метки времени даты (миллисекунды с эпохи) и добавляет надлежащее количество миллисекунд. Вы могли передать отрицательное целое число для дневного параметра, чтобы сделать вычитание. Это было бы более просто, чем "надлежащее" календарное решение:
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);
редактирование: синтаксическому анализатору, кажется, не нравится ссылка на Javadoc, таким образом, здесь это находится в простом тексте:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#add (интервал , интервал)
ответ Anson будет хорошо работать для простого случая, но если бы Вы собираетесь сделать еще сложные вычисления даты, я рекомендовал бы проверить Время Joda . Это сделает Вашу жизнь намного легче.
к вашему сведению во Время Joda Вы могли сделать
DateTime dt = new DateTime();
DateTime fiveDaysEarlier = dt.minusDays(5);
Второе решение Эли Кортрайта неверно, оно должно быть:
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -days);
date.setTime(c.getTime().getTime());