如何使用JodaTime设置固定日期?

Fer*_*iva 0 java jodatime

我正在寻找使用JodaTime每月创建固定日期的任何方式。我有一个JSpinner来设置整数值,我想获取此值并创建日期。例如:JSpinner的有15个,我想创建之日起2016-09-152016-10-152016-11-15

如何使用JodaTime做到这一点?

Bas*_*que 6

java.time

乔达时间项目现在处于维护模式,与球队的java.time类建议迁移。该java.time框架是建立在Java 8和更高版本。

大部分的java.time功能后移植到Java 6和7 ThreeTen,反向移植,并进一步用于安卓ThreeTenABP(见如何使用......)。

java.time.LocalDate

LocalDate级表示没有时间一天和不同时区的日期,唯一的价值。

您可以指定年,月和日。

LocalDate ld = LocalDate.of( 2016 , 1 , 15 );
Run Code Online (Sandbox Code Playgroud)

您可以切换月份。java.time类使用Immutable Objects模式,因此将根据原始值生成一个新的新鲜对象。

LocalDate september = ld.withMonth( 9 ); // 1-12 for January-December.
Run Code Online (Sandbox Code Playgroud)

您可以添加/减去月份。

LocalDate nextMonth = ld.plusMonths( 1 );
LocalDate priorMonth = ld.minusMonths( 1 );
Run Code Online (Sandbox Code Playgroud)

您可以选择任何LocalDate并将日期调整为15日。

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

DateTimeException如果该月的某天的数字无效,则该陷阱被抛出,例如2月31日。

顺便说一句,您可能会发现YearMonthMonthDay类很方便,Month枚举也很方便。

乔达时代

如果您必须使用Joda-Time,它提供的LocalDate类与十分相似java.time.LocalDate

LocalDate ld = new LocalDate( 2016 , 1 , 7 );
LocalDate fifteenthSameMonth = ld.withDayOfMonth( 15 );
Run Code Online (Sandbox Code Playgroud)