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

时间:2011-02-05 06:04:24

标签: java java-time

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

15 个答案:

答案 0 :(得分:97)

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

答案 1 :(得分:39)

Java 8

LocalDate futureDate = LocalDate.now().plusMonths(1);

答案 2 :(得分:24)

TL;博士

LocalDate::plusMonths

示例:

LocalDate.now( )
         .plusMonths( 1 );

最好指定时区。

LocalDate.now( ZoneId.of( "America/Montreal" )
         .plusMonths( 1 );

java.time

java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如java.util.Date.Calendar和& java.text.SimpleDateFormatJoda-Time团队还建议迁移到java.time。

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

大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。

日期仅

如果您想要仅限日期,请使用LocalDate类。

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

today.toString():2017-01-23

添加一个月。

LocalDate oneMonthLater = today.plusMonths( 1 );
  

oneMonthLater.toString():2017-02-23

日期 - 时间

也许你想要一个时间和日期。

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

Instant instant = Instant.now();

添加月份意味着确定日期。确定日期意味着应用时区。对于任何特定的时刻,日期在世界各地变化,在东部早些时候开始新的一天。因此,将Instant调整为时区。

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

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

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

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

从哪里获取java.time类?

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


约达时间

更新:Joda-Time项目现在处于维护模式。它的团队建议迁移到java.time类。我将此部分完整地留给后人。

Joda-Time库提供了一种以智能方式添加月份的方法。

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime now = DateTime.now( timeZone );
DateTime nextMonth = now.plusMonths( 1 );

您可能希望通过将时间调整为当天的第一时刻来关注当天。

DateTime nextMonth = now.plusMonths( 1 ).withTimeAtStartOfDay();

答案 3 :(得分:22)

你可以使用apache的公共语言lang DateUtils helper实用程序类。

Date newDate = DateUtils.addMonths(new Date(), 1);

您可以在http://commons.apache.org/proper/commons-lang/

下载commons lang jar

答案 4 :(得分:7)

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);
java.util.Date dt = cal.getTime();

答案 5 :(得分:6)

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

答案 6 :(得分:3)

(改编自Duggu)

public static Date addOneMonth(Date date)
{
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.MONTH, 1);
    return cal.getTime();
}

答案 7 :(得分:3)

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 ;
}`

答案 8 :(得分:2)

如果您需要单行(即Jasper Reports公式)并且不介意调整不是一个月(即“30天”就足够了):

new Date($F{invoicedate}.getTime() + 30L * 24L * 60L * 60L * 1000L)

答案 9 :(得分:2)

    Date dateAfterOneMonth = new DateTime(System.currentTimeMillis()).plusMonths(1).toDate();

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

如果当天是在2月份运行代码

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

答案 11 :(得分:1)

你可以这样使用;

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

答案 12 :(得分:0)

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

DateUtils.addMonths(new Date(),1);

答案 13 :(得分:-1)

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

public Date  addOneMonth()  {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MONTH, 1);
        return cal.getTime();
}`

答案 14 :(得分:-2)

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