簡體   English   中英

joda time api對於兩組不同的日期表現不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM