java下个月的最后一天

时间:2013-04-04 09:17:36

标签: java

我有变量nowDate类型的Date,我希望set变量nextDate包含下个月的最后一天。

例如: nowDate = 2013-04-16

所以nextDate将包含2013-05-31

我该怎么做?

9 个答案:

答案 0 :(得分:6)

与Xavi相似但只少一行代码:-)

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

答案 1 :(得分:5)

尝试

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);

答案 2 :(得分: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();

答案 3 :(得分:1)

使用joda并关闭sinarf

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

答案 4 :(得分: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());

    }
}

答案 5 :(得分:1)

TL;博士

很简单。

YearMonth.now()            // Get entire month for the date current in the JVM’s current default time zone. Better to pass explicitly your desired/expected time zone.
         .plusMonths( 1 )  // Move to the following month.
         .atEndOfMonth()   // Returns a `LocalDate` object, for a date-only value without time-of-day and without time zone.
         .toString()       // Generate a String in standard ISO 8601 format.
  

2018年2月28日

java.time

现代方法使用 java.time 类来取代麻烦的旧遗留日期时间类。

获取日期。

LocalDate today = LocalDate.now();

最好明确传递所需/预期的时区。

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

从中拉出YearMonth,以表示整月。

YearMonth ym = YearMonth.from( today ) ;

或完全跳过LocalDate

YearMonth ym = YearMonth.now( ZoneId.of( "America/Montreal" ) ) ;

转到下个月。

YearMonth ymNext = ym.plusMonths( 1 ) ;

在月末获取日期。

LocalDate ld = ymNext.atEndOfMonth() ;

以标准ISO 8601格式生成字符串:YYYY-MM-DD。

String output = ld.toString() ;

对于其他格式,请搜索DateTimeFormatter类的Stack Overflow。

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 6 :(得分:0)

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

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

答案 7 :(得分: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

答案 8 :(得分:0)

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

cal.add(Calendar.MONTH, 1);

这段代码产生了一些混乱,因为月份从0开始,所以1是2月份。

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