2013-04-04 8 views

ответ

4

Попробуйте

private static Date getNextDate(Date nowDate) { 
    Calendar c = Calendar.getInstance(); 
    c.setTime(nowDate); 
    c.add(Calendar.MONTH, 1); 
    c.set(Calendar.DATE, c.getMaximum(Calendar.DATE)); 
    Date nextDate = c.getTime(); 
    return nextDate; 
} 

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

Date nowDate = new Date(); 
    Date nextDate = getNextDate(nowDate); 
3

Вы можете попробовать установив Calendar на один день за два месяца вперед, а затем вычитать один день:

Calendar c = Calendar.getInstance(); 
c.add(Calendar.MONTH, 2); 
c.set(Calendar.DAY_OF_MONTH, 1); 
c.add(Calendar.DATE, -1); 
Date nextDate = c.getTime(); 

Как и другие уже отмечали, вы также можете просто добавить один месяц, и использовать Calendar.getActualMaximum() для установки в последний день следующего месяца.

Calendar c = Calendar.getInstance(); 
c.add(Calendar.MONTH, 1); 
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH)); 
Date nextDate = c.getTime(); 
+0

почему 2 добавить в месяц?Зачем устанавливать 1 день месяца? – faszynski

+0

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

1

Использование joda и списывание от sinarf:

DateTime dt = new DateTime().plusMonths(1); 
DateTime lastJoda = dt.dayOfMonth().withMaximumValue(); 
Date last = lastJoda.toDate(); 
System.out.println(last.toString()); 
6

Подобно Хави, но один меньше строки кода :-)

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1); 
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); 
0

Вы можете сделать следующее, чтобы получить последний день месяц

Calendar calendar = Calendar.getInstance(); 
calendar.setTime(date); 
calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 
+1

-1: ОП хочет рассчитать последний день следующего месяца, а не последний день текущего месяца. –

1

Одним из способов является увеличение на 2 месяца до вашего текущего месяца и установка даты как 1-го. После этого уменьшите дату на 1, и он даст вам последний день месяца. Это автоматически позаботится о високосный год, 30 дней, 31 день, 29 дней и 28 дней. Программа ниже

public class LastDayofNextMonth { 

    public static void main(String args[]) 
    { 

     Calendar cal = Calendar.getInstance(); 
     cal.set(2013,Calendar.APRIL, 14) ; 
     cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)+2); 
     cal.set(Calendar.DATE,1); 
     cal.add(Calendar.DATE,-1); 
     System.out.println(cal.getTime().toString()); 

    } 
} 
+0

Xavi уже опубликовал тот же ответ выше ... oops Я опоздал .. – Joe2013

0

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

Сначала установите календарь на следующий месяц. Использование: cal.add(Calendar.MONTH, 1);

Затем используйте getActualMaximum вычислить последний день месяца, установленного в предыдущем шаге.

import java.util.Calendar; 
import java.util.Date; 

public class Main{ 

    public static void main(String ar[]){ 
     Calendar cal = Calendar.getInstance(); 

     cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE)); 
     cal.add(Calendar.MONTH, 1); 
     Date lastDateOfNextMonth = cal.getTime(); 
     System.out.println(lastDateOfNextMonth); 

    } 
} 

IDEONE DEMO

0

у нас так много хороших ответов, однако все вышеперечисленные ответы код как:

cal.add(Calendar.MONTH, 1); 

этот код производит немного путаницы, потому что Месяцы начинаются с 0, так что 1 на февраль.

(Edit: Целое число в функции Add() не номер месяца (1 = февраль), но количество месяцев, чтобы добавить)

Смежные вопросы