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

Как добавить один месяц к текущей дате в Java?

В Java, как я могу добавить один месяц к текущей дате?

4b9b3361

Ответ 1

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);

Ответ 2

Java 8

LocalDate futureDate = LocalDate.now().plusMonths(1);

Ответ 3

Вы можете использовать apache commons lang для вспомогательного класса DateUtils.

Date newDate = DateUtils.addMonths(new Date(), 1);

Вы можете скачать commons lang jar в http://commons.apache.org/proper/commons-lang/

Ответ 4

ТЛ; др

LocalDate::plusMonths

Пример:

LocalDate.now( )
         .plusMonths( 1 );

Лучше указать часовой пояс.

LocalDate.now( ZoneId.of( "America/Montreal" )
         .plusMonths( 1 );

java.time

Рамка java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют старые проблемные классы даты и времени, такие как java.util.Date, .Calendar, и java.text.SimpleDateFormat. Команда Joda-Time также советует перейти на java.time.

Чтобы узнать больше, ознакомьтесь с учебным пособием Oracle. И поиск Qaru для многих примеров и объяснений.

Большая часть функциональности java.time была перенесена на Java 6 и 7 в ThreeTen-Backport и далее адаптирована для Android в ThreeTenABP.

Дата только

Если вы хотите использовать только дату, используйте класс LocalDate.

ZoneId z = ZoneId.of( "America/Montreal" );
 LocalDate today = LocalDate.now( z );

today.toString(): 2017-01-23

Добавьте месяц.

LocalDate oneMonthLater = today.plusMonths( 1 );

oneMonthLater.toString(): 2017-02-23

Дата-время

Возможно, вам нужно время дня вместе с датой.

Сначала получите текущий момент в UTC с разрешением наносекунды.

Instant instant = Instant.now();

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

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Теперь добавьте свой месяц. Пусть java.time обрабатывает Leap month и тот факт, что месяцы меняются по длине.

ZonedDateTime zdtMonthLater = zdt.plusMonths( 1 );

Возможно, вы захотите отрегулировать время суток до первого момента дня при таком расчете. Этот первый момент не всегда 00:00:00.0 поэтому пусть java.time определяет время суток.

ZonedDateTime zdtMonthLaterStartOfDay = zdtMonthLater.toLocalDate().atStartOfDay( zoneId );

О java.time

Рамка java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют неприятные старые устаревшие классы времени, такие как java.util.Date, Calendar и SimpleDateFormat.

Проект Joda-Time, теперь в режиме обслуживания, советует перейти на классы java.time.

Чтобы узнать больше, ознакомьтесь с учебным пособием Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация - JSR 310.

Где можно получить классы java.time?

  • Java SE 8, Java SE 9 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API с интегрированной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональных возможностей java.time включена обратно в Java 6 и 7 в ThreeTen-Backport.
  • Android

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и другие.


Joda времени

Обновление: проект Joda-Time теперь находится в режиме обслуживания. Его команда советует перейти на классы java.time. Я оставляю этот раздел неповрежденным для потомков.

Библиотека Joda-Time предлагает метод для удобного ввода месяцев.

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime now = DateTime.now( timeZone );
DateTime nextMonth = now.plusMonths( 1 );

Вы можете сосредоточиться на этом дне, отрегулировав время суток до первого момента дня.

DateTime nextMonth = now.plusMonths( 1 ).withTimeAtStartOfDay();

Ответ 5

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);
java.util.Date dt = cal.getTime();

Ответ 6

Используйте calander и попробуйте этот код.

Calendar calendar = Calendar.getInstance();         
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
Date nextMonthFirstDay = calendar.getTime();
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date nextMonthLastDay = calendar.getTime();

Ответ 7

public Date  addMonths(String dateAsString, int nbMonths) throws ParseException {
        String format = "MM/dd/yyyy" ;
        SimpleDateFormat sdf = new SimpleDateFormat(format) ;
        Date dateAsObj = sdf.parse(dateAsString) ;
        Calendar cal = Calendar.getInstance();
        cal.setTime(dateAsObj);
        cal.add(Calendar.MONTH, nbMonths);
        Date dateAsObjAfterAMonth = cal.getTime() ;
    System.out.println(sdf.format(dateAsObjAfterAMonth));
    return dateAsObjAfterAMonth ;
}`

Ответ 8

(адаптировано из Duggu)

public static Date addOneMonth(Date date)
{
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.MONTH, 1);
    return cal.getTime();
}

Ответ 9

Если вам нужен однострочный (т.е. для формулы Jasper Reports) и не возражаете, если настройка не ровно на один месяц (т.е. достаточно 30 дней):

new Date($F{invoicedate}.getTime() + 30L * 24L * 60L * 60L * 1000L)

Ответ 10

Чтобы найти день после одного месяца, нужно посмотреть, в какой день месяца он сегодня.

Так что если день первый день месяца, запустите следующий код

Calendar calendar = Calendar.getInstance();

    Calendar calFebruary = Calendar.getInstance();
    calFebruary.set(Calendar.MONTH, Calendar.FEBRUARY);

    if (calendar.get(Calendar.DAY_OF_MONTH) == 1) {// if first day of month
    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
    Date nextMonthFirstDay = calendar.getTime();
    System.out.println(nextMonthFirstDay);

    }

если день последний день месяца, выполните следующие коды.

    else if ((calendar.getActualMaximum(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH))) {// if last day of month
    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date nextMonthLastDay = calendar.getTime();
    System.out.println(nextMonthLastDay);
    }

если день в феврале запускается по следующему коду

    else if (calendar.get(Calendar.MONTH) == Calendar.JANUARY
            && calendar.get(Calendar.DAY_OF_MONTH) > calFebruary.getActualMaximum(Calendar.DAY_OF_MONTH)) {// control of february

    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date nextMonthLastDay = calendar.getTime();
    System.out.println(nextMonthLastDay);

    }

для других случаев используются следующие коды.

    else { // any day
    calendar.add(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date theNextDate = calendar.getTime();
    System.out.println(theNextDate);
    }

Ответ 11

Вы можете использовать это:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String d = "2000-01-30";
Date date= new Date(sdf.parse(d).getTime());
date.setMonth(date.getMonth() + 1);

Ответ 12

    Date dateAfterOneMonth = new DateTime(System.currentTimeMillis()).plusMonths(1).toDate();

Ответ 13

Этот метод возвращает текущую дату плюс 1 месяц.

public Date  addOneMonth()  {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MONTH, 1);
        return cal.getTime();
}`

Ответ 14

Вы можете использовать класс DateUtils в пакете org.apache.commons.lang3.time

DateUtils.addMonths(new Date(),1);

Ответ 15

public class StringSplit {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        date(5, 3);
        date(5, 4);
    }

    public static String date(int month, int week) {
        LocalDate futureDate = LocalDate.now().plusMonths(month).plusWeeks(week);
        String Fudate = futureDate.toString();
        String[] arr = Fudate.split("-", 3);
        String a1 = arr[0];
        String a2 = arr[1];
        String a3 = arr[2];
        String date = a3 + "/" + a2 + "/" + a1;
        System.out.println(date);
        return date;
    }
}

Выход:

10/03/2020
17/03/2020