如何在Java中向当前日期添加一个月?

如何在Java中向当前日期添加一个月?,java,java-time,Java,Java Time,在Java中,如何向当前日期添加一个月?您可以使用apache的commons lang DateUtils helper实用程序类 Calendar cal = Calendar.getInstance(); cal.add(Calendar.MONTH, 1); Date newDate = DateUtils.addMonths(new Date(), 1); 您可以在tl下载commons lang jar;博士 例如: LocalDate.now( ) .plu

在Java中,如何向当前日期添加一个月?

您可以使用apache的commons lang DateUtils helper实用程序类

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);
Date newDate = DateUtils.addMonths(new Date(), 1);
您可以在

tl下载commons lang jar;博士 例如:

LocalDate.now( )
         .plusMonths( 1 );
最好指定时区

LocalDate.now( ZoneId.of( "America/Montreal" )
         .plusMonths( 1 );
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
java.time 该框架内置于Java8及更高版本中。这些类取代了旧的麻烦的日期时间类,如
java.util.date
.Calendar
,&
java.text.SimpleDateFormat
。该团队还建议迁移到java.time

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释

大部分java.time功能都在中向后移植到Java6和Java7,并在中进一步适应Android

仅日期 如果只需要日期,请使用
LocalDate

ZoneId z = ZoneId.of( "America/Montreal" );
 LocalDate today = LocalDate.now( z );
今天。toString():2017-01-23

加上一个月

LocalDate oneMonthLater = today.plusMonths( 1 );
一个月后。toString():2017-02-23

日期时间 也许你想要一天中的某个时间和日期

首先获得当前时刻的分辨率为

增加一个月意味着确定日期。确定日期意味着应用时区。在任何一个特定的时刻,世界各地的日期都不尽相同,新的一天在东方提前到来。因此,将
即时
调整为时区

LocalDate.now( ZoneId.of( "America/Montreal" )
         .plusMonths( 1 );
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
现在加上你的月份。让java.time处理闰月,以及月份长度不同的事实

ZonedDateTime zdtMonthLater = zdt.plusMonths( 1 );
在进行此类计算时,您可能希望将一天中的时间调整为一天中的第一个时刻。第一个时刻并不总是
00:00:00.0
,所以让java.time确定一天中的时间

ZonedDateTime zdtMonthLaterStartOfDay = zdtMonthLater.toLocalDate().atStartOfDay( zoneId );

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

该项目现已启动,建议迁移到类

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类。Hibernate5和JPA2.2支持java.time

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • 带来了一些小功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • Android(26+)的更高版本捆绑了java.time类的实现
    • 对于早期的Android((改编自Duggu)


      Java8

      LocalDate futureDate = LocalDate.now().plusMonths(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.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 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);
          }
      
      如果日期在二月,请运行以下代码

      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.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);
          }
      
      如果您需要一行(即Jasper Reports公式),并且不介意调整时间是否不正好是一个月(即“30天”就足够了):


      新日期($F{invoicedate}.getTime()+30L*24L*60L*60L*60L*1000L)
      使用日历并尝试此代码

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

      此方法返回当前日期加1个月

      public Date  addOneMonth()  {
              Calendar cal = Calendar.getInstance();
              cal.add(Calendar.MONTH, 1);
              return cal.getTime();
      }`
      
      你可以这样使用

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

      您可以在org.apache.commons.lang3.time包中使用DateUtils类

      DateUtils.addMonths(new Date(),1);
      
      输出:

      10/03/2020
      17/03/2020
      

      thanx piyush,这个cal date格式是什么,我需要将它存储在mysqlmysql数据类型中,因为date是DATETIME。cal返回的这个正确的日期格式,我可以用它存储在MySQL中吗?Java代码以所需的格式将一个月添加到当前日期,如下所示。现在,由您将这个字符串转换为日期并插入into MYSql数据库。请注意,您可以使用STR_TO_date(STR,format)函数在DateFormat构造函数或更高版本的MYSql查询中更改日期格式(Calendar.MONTH,1);String dateString=formatter.format(now.getTime());这已经过时了:您能解释一下您的代码是做什么的,而不仅仅是一个大代码块吗?我的代码更严格,更通用。更严格,因为它只处理固定格式为“MM/dd/yyyy”的日期(以字符串形式).Generic,因为它允许您在指定的日期添加任何一个正月。因此,如果您必须使用限制性较小的代码,在添加一个月后获取任何java.util.date并呈现另一个java.util.date,请参见以下内容:Calendar cal=Calendar.getInstance();cal.setTime(date);cal.add(Calendar.month,1);cal.getTime();related*@从JDK版本1.1起已弃用,*替换为
      Calendar.set(Calendar.MONTH,int-MONTH)
      。正如Date.java所说。别忘了给数字加上“L”后缀,否则将被视为简单的int并溢出为负数!仅供参考,非常麻烦的日期时间类,如,
      java.text.simpleDataFormat
      ,现在被java 8及更高版本中内置的类所取代。请参阅。首先,答案是基于OP的错误。第二个OP是在8(!)年前回答的,第三个是格式化日期输出的更好方法,而不是使用字符串加载。要使java.util.date:date.from((LocalDate.now().plusMonths(1)).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()成为简单易行的解决方案。
      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);
      
          Date dateAfterOneMonth = new DateTime(System.currentTimeMillis()).plusMonths(1).toDate();
      
      DateUtils.addMonths(new Date(),1);
      
      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