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.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
约会时间
也许您想要日期和时间。
首先以UTC为单位获取当前时刻,分辨率为纳秒。
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.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
在哪里获取java.time类?
Java SE 8, Java SE 9和更高版本
内置的
标准Java API的一部分,具有捆绑的实现。
Java 9添加了一些次要功能和修复。
Java SE 6和 Java SE 7
java.time的许多功能在ThreeTen- Backport中都被反向移植到Java 6和7 。
安卓系统
所述ThreeTenABP项目适应ThreeTen-反向移植(上述)为Android特异性。
请参阅如何使用ThreeTenABP…。
该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();