所以你想知道某人今天 46 岁的生日吗? (你的问题不清楚。)
java.time
Joda-Time 的制造商告诉我们,只要您觉得舒服,就转而使用 Java 8 和更高版本中内置的 java.time 框架。
ZonedDateTime birthdateOf46YearOld = ZonedDateTime.now().minusYears( 46 );
这个对象被隐式分配给 JVM 当前的默认时区。我建议始终明确您的时区。
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or… ZoneOffset.UTC …or… ZoneId.systemDefault().
ZonedDateTime birthdateOf46YearOld = ZonedDateTime.now( zoneId ).minusYears( 46 );
或者您想测试手头的日期时间值是否与该生日相同?
Boolean hit = someZdt.isEqual( birthdateOf46YearOld );
如果您只关心没有时间或时区的日期,请使用LocalDate,类似于 Joda-Time。请注意,时区对于确定今天的日期至关重要,因为它在全球各地的时区中有所不同。
LocalDate birthdate = LocalDate.now( zoneId ).minusYears( 46) ;
如果您只是想要一对 LocalDate 对象之间经过的时间(以年为单位),请使用 Period 类。
LocalDate today = LocalDate.now( zoneId );
LocalDate birthDate = … ;
Period period = Period.between( birthDate , today );
Integer ageInYears = period.getYears();
Boolean hit = ageInYears.equals ( Integer.valueOf( 46 ) ) ;
乔达时间
如果您无法使用 Java 8 或更高版本,则在 Joda-Time 中可以使用相同类型的代码。
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime birthdate = DateTime.now( zone ).minusYears( 46 );