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

kir*_*ran 75 java java-time

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

Piy*_*too 103

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);
Run Code Online (Sandbox Code Playgroud)

  • 现在这已经过时了:http://stackoverflow.com/questions/4905416/adding-one-month-to-current-date/29250229#29250229 (3认同)

sof*_*arn 43

Java 8

LocalDate futureDate = LocalDate.now().plusMonths(1);
Run Code Online (Sandbox Code Playgroud)


Bas*_*que 27

TL;博士

LocalDate::plusMonths
Run Code Online (Sandbox Code Playgroud)

例:

LocalDate.now( )
         .plusMonths( 1 );
Run Code Online (Sandbox Code Playgroud)

最好指定时区.

LocalDate.now( ZoneId.of( "America/Montreal" )
         .plusMonths( 1 );
Run Code Online (Sandbox Code Playgroud)

java.time

java.time框架是建立在Java 8和更高版本.这些类取代旧的麻烦日期时间类,如java.util.Date,.Calendar,和java.text.SimpleDateFormat.该乔达时球队还建议迁移java.time.

要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.

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

日期,只

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

ZoneId z = ZoneId.of( "America/Montreal" );
 LocalDate today = LocalDate.now( z );
Run Code Online (Sandbox Code Playgroud)

today.toString():2017-01-23

加一个月.

LocalDate oneMonthLater = today.plusMonths( 1 );
Run Code Online (Sandbox Code Playgroud)

oneMonthLater.toString():2017-02-23

约会时间

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

首先以UTC为单位获得当前时刻,分辨率为纳秒.

Instant instant = Instant.now();
Run Code Online (Sandbox Code Playgroud)

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

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Run Code Online (Sandbox Code Playgroud)

现在添加你的月份.让java.time处理闰月,以及月份长度不同的事实.

ZonedDateTime zdtMonthLater = zdt.plusMonths( 1 );
Run Code Online (Sandbox Code Playgroud)

您可能希望在进行此类计算时将时间调整为当天的第一时刻.第一个时刻并非总是00:00:00.0如此,让java.time确定时间.

ZonedDateTime zdtMonthLaterStartOfDay = zdtMonthLater.toLocalDate().atStartOfDay( zoneId );
Run Code Online (Sandbox Code Playgroud)

关于java.time

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 );
Run Code Online (Sandbox Code Playgroud)

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

DateTime nextMonth = now.plusMonths( 1 ).withTimeAtStartOfDay();
Run Code Online (Sandbox Code Playgroud)


mnm*_*mnm 24

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

Date newDate = DateUtils.addMonths(new Date(), 1);
Run Code Online (Sandbox Code Playgroud)

你可以在http://commons.apache.org/proper/commons-lang/下载commons lang jar


kel*_*a88 10

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);
java.util.Date dt = cal.getTime();
Run Code Online (Sandbox Code Playgroud)


Bam*_*omy 6

(改编自杜古)

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


Mad*_*han 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();
Run Code Online (Sandbox Code Playgroud)


Ali*_*lah 6

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

DateUtils.addMonths(new Date(),1);
Run Code Online (Sandbox Code Playgroud)


小智 5

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 ;
}`
Run Code Online (Sandbox Code Playgroud)