4

2つの異なるコードスニペット(マイナーな変更あり)は、jodatimeapiによる計算でエラーを示しています。

最初のもの:正しい結果を与える

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番目のもの:間違った結果を出します

スニペットの変更:DateTime date2 = new DateTime(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

これは計算のエラーですか、それともいくつかの構成がありませんか?

4

2 に答える 2

4

これは、7日が1週間になっているためだと思います。何が起こるかというと、残りをカプセル化する可​​能な最大の時間値が常に使用されます。

IE 8日ある場​​合、これは1週間と1日です。294日(開始日による)の場合、これは1年、1か月、1週間、および1日です。等...

したがって、必要なものは次のようなものです。

System.out.println(age.getYears()+"年"+ age.getMonths()+"月" +(age.getWeeks()* 7 + age.getDays())+ "日");

于 2012-06-27T12:42:56.057 に答える
3

何が起こったのかというと、あなたは一週間転がっています。入力として「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");
于 2012-06-27T12:40:09.347 に答える