Подтвердить что ты не робот

Java.util.Date - Удаление трех месяцев с даты?

У меня есть дата типа java.util.Date

Я хочу вычесть из него три месяца.

Не найти много радости в API.

4b9b3361

Ответ 1

Здесь простая версия JDK, ей нужен класс Calendar в качестве помощника:

Date referenceDate = new Date();
Calendar c = Calendar.getInstance(); 
c.setTime(referenceDate); 
c.add(Calendar.MONTH, -3);
return c.getTime();

Но вы должны серьезно подумать об использовании библиотеки Joda из-за различных недостатков Date и Calendar. С помощью Joda вы можете сделать следующее:

new DateTime().minusMonths(3).toDate();

Или если вы хотите вычесть из заданной даты вместо текущего:

new DateTime(referenceDate).minusMonths(3).toDate();

Обновление для Java 8: С помощью Java 8 вы также можете использовать новый API JSR 310 (который вдохновлен Джодой):

LocalDateTime.from(referenceDate.toInstant()).minusMonths(3);

Ответ 2

Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.MONTH, -3);

Задайте дату с помощью метода setTime.

Ответ 3

Я всегда рекомендую Joda для такого рода вещей. Он имеет гораздо более удобный API и не страдает от проблем с потоками, которые имеют стандартная дата и время Java (например, проблемы с SimpleDateFormat или общая изменчивость).

например.

DateTime result = dt.minusMonths(3);

Ответ 4

Сам класс Date недостаточно (+: Здесь вы должны использовать класс Calendar

Что-то в этом направлении

GregorianCalendar lCalendar = new GregorianCalendar();
lCalendar.setTime( aDate );
lCalendar.add(Calendar.MONTH, -3);

p.s. фрагмент выше не проверяется на компиляцию.

Ответ 5

public static Date getDateMonthsAgo(int numOfMonthsAgo)
{
    Calendar c = Calendar.getInstance(); 
    c.setTime(new Date()); 
    c.add(Calendar.MONTH, -1 * numOfMonthsAgo);
    return c.getTime();
}

вернет дату X месяцев в прошлом. Аналогично, здесь функция, которая возвращает дату X дней в прошлом.

public static Date getDateDaysAgo(int numOfDaysAgo)
{
    Calendar c = Calendar.getInstance(); 
    c.setTime(new Date()); 
    c.add(Calendar.DAY_OF_YEAR, -1 * numOfDaysAgo);
    return c.getTime();
}

Ответ 6

Вы хотите сегодня - 3 месяца в формате dd MMMM yyyy

     SimpleDateFormat format = new SimpleDateFormat("dd MMMM yyyy");

     Calendar c = Calendar.getInstance(); 
     c.setTime(new Date()); 
     c.add(Calendar.MONTH, -3);

     Date d = c.getTime();
     String res = format.format(d);

     System.out.println(res);

Итак, этот код может выполнить задание;)

Ответ 7

Хорошо с java.sql.Date(подкласс java.util.Date) и JDK 8 LocalDate поможет вам сделать это в одной строке;)

Date date = java.sql.Date.valueOf(LocalDate.now().minus(3, ChronoUnit.MONTHS));

Ответ 8

Вы можете использовать Apache Commons Lang3 DateUtils addMonths.

static Date addMonths(Date date, int amount)

Добавляет несколько месяцев к дате, возвращающей новый объект. Исходная дата не изменилась. Добавляемая сумма может быть отрицательной, поэтому вы можете вернуться на 3 месяца назад.