Как уменьшить один месяц от текущей даты и хранится в переменной даты с помощью Java?

Как сократить один месяц с текущей даты и хотите болеть в java.util.Date Я использую этот код, но он показывает ошибку во 2-й строке

 java.util.Date da = new Date();
 da.add(Calendar.MONTH, -1); //error

Как сохранить эту дату в java.util.Date переменная?

8 ответов

Решение

Использовать календарь:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
Date result = cal.getTime();

Начиная с Java 8, предлагается использовать API Date-Time вместо Calendar,

Если вы хотите Date возвращаемый объект:

Date date = Date.from(ZonedDateTime.now().minusMonths(1).toInstant());

Если вам не нужен именно Date Объект, вы можете использовать классы напрямую, предоставленные пакетом, даже для получения дат в других часовых поясах:

ZonedDateTime dateInUTC = ZonedDateTime.now(ZoneId.of("Pacific/Auckland")).minusMonths(1);
Calendar calNow = Calendar.getInstance()

// adding -1 month
calNow.add(Calendar.MONTH, -1);

// fetching updated time
Date dateBeforeAMonth = calNow.getTime();

Использование нового пакета java.time в Java8 и Java9

import java.time.LocalDate;

LocalDate mydate = LocalDate.now(); // Or whatever you want
mydate = mydate.minusMonths(1);

Преимущество использования этого метода состоит в том, что вы избегаете всех проблем, связанных с изменением продолжительности месяца, и имеете большую гибкость в настройке дат и диапазонов. Локальная часть также работает с часовыми поясами, поэтому их легко конвертировать.

Кроме того, используя java.time, вы также можете получить день недели, день месяца, все дни до последнего месяца, все дни до определенного дня недели и т. Д.

mydate.plusMonths(1);
mydate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)).getDayOfMonth();
mydate.with(TemporalAdjusters.lastDayOfMonth());

Ты можешь использовать Calendar

    java.util.Date da = new Date();
    Calendar cal = Calendar.getInstance();
    cal.setTime(da);
    cal.add(Calendar.MONTH, -1);
    da = cal.getTime();

Использование JodaTime:

Date date = new DateTime().minusMonths(1).toDate();

JodaTime предоставляет удобный API для манипулирования датами.

Обратите внимание, что аналогичный API даты будет представлен в JDK8 с JSR310.

Вы также можете использовать DateUtils из apache common. Библиотека также поддерживает добавление часов, минут и т. д.

      Date date = DateUtils.addMonths(new Date(), -1)

Увеличить 1 месяц JDF

Date dateTo = new SimpleDateFormat("yyyy/MM/dd").parse(jdfMeTo.getJulianDate());
        Calendar cal = Calendar.getInstance();
        cal.setTime(dateTo);
        cal.add(Calendar.MONTH, -1);
        Date dateOf = cal.getTime();
        Log.i("dateOf", dateOf.getTime() + "");
        jdfMeOf.setJulianDate(cal.get(Calendar.DAY_OF_YEAR), cal.get(Calendar.DAY_OF_MONTH), 
        cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));
Другие вопросы по тегам