5

我有变量 nowDate 类型的日期,我想设置变量 nextDate 包含下个月的最后一天。

例如:nowDate = 2013-04-16

所以 nextDate 将包含 2013-05-31

我怎样才能做到这一点?

4

9 回答 9

6

类似于 Xavi,但少了一行代码 :-)

Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
于 2013-04-04T09:26:47.727 回答
6

尝试

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);
于 2013-04-04T09:28:56.490 回答
4

您可以尝试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();
于 2013-04-04T09:22:42.533 回答
3
于 2018-04-19T08:19:30.493 回答
1

使用joda抄袭 sinarf

DateTime dt = new DateTime().plusMonths(1);
DateTime lastJoda = dt.dayOfMonth().withMaximumValue();
Date last = lastJoda.toDate();
System.out.println(last.toString());
于 2013-04-04T09:25:24.257 回答
1

一种方法是将 2 个月增加到您当前的月份并将日期设置为 1st。之后将日期减 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());

    }
}
于 2013-04-04T09:28:03.053 回答
0

使用日历

首先将日历设置为下个月。采用: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 演示

于 2013-04-04T09:29:41.663 回答
0

我们有很多很好的答案,但是以上所有答案都有如下代码:

cal.add(Calendar.MONTH, 1);

这段代码会产生一些混乱,因为月份从 0 开始,所以 1 代表二月。

(编辑: add() 函数中的整数不是月份数(1=二月)而是要添加的月份数)

于 2014-06-08T21:23:23.187 回答
-1

您可以执行以下操作来获取本月的最后一天

Calendar calendar = Calendar.getInstance();   
calendar.setTime(date);   
calendar.getActualMaximum(Calendar.DAY_OF_MONTH);   
于 2013-04-04T09:27:53.997 回答