在Java中,如何将一个月添加到当前日期?
Answers:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
Java 8
LocalDate futureDate = LocalDate.now().plusMonths(1);
您可以使用apache的公共语言lang DateUtils helper实用程序类。
Date newDate = DateUtils.addMonths(new Date(), 1);
您可以在http://commons.apache.org/proper/commons-lang/下载Commons lang jar。
LocalDate::plusMonths
例:
LocalDate.now( )
.plusMonths( 1 );
最好指定时区。
LocalDate.now( ZoneId.of( "America/Montreal" )
.plusMonths( 1 );
该java.time框架是建立在Java 8和更高版本。这些类取代旧的麻烦日期时间类,如java.util.Date
,.Calendar
,和java.text.SimpleDateFormat
。该乔达时球队还建议迁移java.time。
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。
多的java.time功能后移植到Java 6和7在ThreeTen-反向移植和在进一步适于到Android ThreeTenABP。
如果只想使用日期,请使用LocalDate
该类。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
today.toString():2017年1月23日
加一个月。
LocalDate oneMonthLater = today.plusMonths( 1 );
oneMonthLater.toString():2017-02-23
也许您想要日期和时间。
Instant instant = Instant.now();
添加一个月意味着确定日期。确定日期意味着应用时区。在任何给定的时刻,日期在世界各地都会有所不同,新的天要早到东方。因此,Instant
将其调整为一个时区。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
现在添加您的月份。让java.time处理Le月,以及月的长度不同的事实。
ZonedDateTime zdtMonthLater = zdt.plusMonths( 1 );
进行这种计算时,您可能需要将时间调整为一天的第一时刻。第一时刻并不总是00:00:00.0
如此,因此让java.time确定一天中的时间。
ZonedDateTime zdtMonthLaterStartOfDay = zdtMonthLater.toLocalDate().atStartOfDay( zoneId );
该java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
在哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容打下了基础。你可能在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,和更多。
更新:Joda-Time项目现在处于维护模式。其团队建议迁移到java.time类。我保留此部分以供后代使用。
该乔达时库提供以智能方式添加个月的方法。
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime now = DateTime.now( timeZone );
DateTime nextMonth = now.plusMonths( 1 );
您可能需要通过将时间调整为一天的第一时刻来集中精力于一天。
DateTime nextMonth = now.plusMonths( 1 ).withTimeAtStartOfDay();
使用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();
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 ;
}`
您可以在org.apache.commons.lang3.time包中使用DateUtils类
DateUtils.addMonths(new Date(),1);
如果您需要单线(例如Jasper Reports公式)并且不介意调整不完全是一个月(即“ 30天”就足够了):
new Date($F{invoicedate}.getTime() + 30L * 24L * 60L * 60L * 1000L)
您可以这样使用;
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);
为了找到一个月后的一天,有必要查看今天的星期几。
因此,如果一天是每月的第一天,请运行以下代码
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);
}
java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
现在的遗产,由取代java.time内置到Java 8和更高等级。请参见Oracle教程。
此方法返回当前日期加上1个月。
public Date addOneMonth() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
return cal.getTime();
}`
Date dateAfterOneMonth = new DateTime(System.currentTimeMillis()).plusMonths(1).toDate();
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