我有变量nowDate类型的Date,我希望set变量nextDate包含下个月的最后一天。
例如: nowDate = 2013-04-16
所以nextDate将包含2013-05-31
我该怎么做?
答案 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)
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)
很简单。
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 类来取代麻烦的旧遗留日期时间类。
获取日期。
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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 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月),而是要添加的月数)