[英]joda time api behaves differently for two different set of dates
兩個不同的代碼片段(略有變化)在joda time api的計算中顯示出一些錯誤:
第一個:給出正確的結果
DateTime date1 = new DateTime(2010,1,5, 0, 0, 0, 0);
DateTime date2 = new DateTime(2012,6,11, 0, 0, 0, 0);
Period age =new Period(date1,date2);
System.out.println(age.getYears()+" years "+age.getMonths()+" months "+age.getDays()+" days");
結果: 2 years 5 months 6 days
第二個:給出不正確的結果
變化在代碼段 :日期時間日期2 =新日期時間(2012,6,12,0,0,0,0);
DateTime date1 = new DateTime(2010,1,5, 0, 0, 0, 0);
DateTime date2 = new DateTime(2012,6,12, 0, 0, 0, 0);
Period age =new Period(date1,date2);
System.out.println(age.getYears()+" years "+age.getMonths()+" months "+age.getDays()+" days");
給出結果: 2 years 5 months 0 days
這是計算錯誤還是我錯過了一些配置?
我相信這是因為7天現在是1周。 會發生的是,將始終使用封裝剩余部分的最大可能時間值。
IE如果你有8天,這是1周1天。 如果您有294天(取決於開始日期),則為1年,1個月,1周和1天。 等等...
所以你需要的是:
System.out.println(age.getYears()+“years”+ age.getMonths()+“months”+(age.getWeeks()* 7 + age.getDays())+“days”);
發生了什么事,你已經滾了一個星期。 如果你嘗試“2012,6,13,0,0,0,0”作為你的輸入,我會得到一個...1 days
結果。
添加對getWeeks
的調用以使輸出更清晰。 將您的println更改為:
System.out.println(age.getYears()+" years "+age.getMonths()+" months "+age.getWeeks()+" weeks " + age.getDays()+" days");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.