Как вычесть X дней из даты с помощью календаря Java?

171
задан Joachim Sauer 8 October 2012 в 08:30
поделиться

5 ответов

Взятый от документы здесь :

Добавляет или вычитает указанное количество времени к данному календарному полю, на основе правил календаря. Например, для вычитания 5 дней с текущего времени календаря можно достигнуть его путем вызова:

Calendar calendar = Calendar.getInstance(); // this would default to now
calendar.add(Calendar.DAY_OF_MONTH, -5).
294
ответ дан Floern 23 November 2019 в 20:43
поделиться

Вы могли использовать 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. Любая функция могла быть легко изменена, чтобы сделать это другой путь при желании.

38
ответ дан Markus Schulte 23 November 2019 в 20:43
поделиться
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 (интервал , интервал)

5
ответ дан matt b 23 November 2019 в 20:43
поделиться

ответ Anson будет хорошо работать для простого случая, но если бы Вы собираетесь сделать еще сложные вычисления даты, я рекомендовал бы проверить Время Joda . Это сделает Вашу жизнь намного легче.

к вашему сведению во Время Joda Вы могли сделать

DateTime dt = new DateTime();
DateTime fiveDaysEarlier = dt.minusDays(5);
35
ответ дан Community 23 November 2019 в 20:43
поделиться

Второе решение Эли Кортрайта неверно, оно должно быть:

Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -days);
date.setTime(c.getTime().getTime());
0
ответ дан 23 November 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: