所以你想要今天有人轉身46的生日? (你的問題是不明確的。)
java.time
喬達時間的製造商告訴我們,移動到使用java.time框架構建在Java 8和以後只要是舒服。
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
,類似於喬達時間。請注意,時區對於確定今天的日期至關重要,因爲它在全球各個時區都有所不同。
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或更高版本不提供給你,相同類型的代碼喬達時間工作。
DateTimeZone zone = DateTimeZone.forID("America/Montreal");
DateTime birthdate = DateTime.now(zone).minusYears(46);
哇....我不知道爲什麼我沒有想到這個......最明顯的解決方案......謝謝 – Richard
np。你可以接受答案:-) – mks
實際上,現在我無法正常工作,因爲'new LocalDate'在getAge函數內部,我無法在其中硬編碼值。它必須是生產使用中的當前日期。所以我想知道是否有某種方法可以用'Mockito.when'代替' – Richard