2017-08-27 1 views
1

が疲れてjava.time.Periodとなり、結果は私の手動計算と3日間異なります。 ここで奇妙なことは、私は2つの期間に期間を分割するとき、結果は私の手動計算と一致します。java.time.Period、期間を分割すると、

2番目の方法は、期間を手動で計算する方法と同じです。

私は見逃したことがありますか?カレンダー演算の標準的な方法やアルゴリズムはありますか? java.time.Periodで使用されるアルゴリズムは何ですか?

import java.time.LocalDate; 
import java.time.Period; 
import java.time.temporal.ChronoUnit; 

public class test2 { 

    public static void main(String[] args) { 

     LocalDate d1 = LocalDate.of(2014, 2, 14); 
     LocalDate d2 = LocalDate.of(2017, 8, 1); 

     Period p = Period.between(d1, d2); 

     //using period between the two dates directly 
     System.out.println("period between " + d1.toString() + " and " + d2.toString() + " is " + p.getYears() 
       + " years " + p.getMonths() + " months " + p.getDays() + " Days"); 

     //dividing the period into two parts 
     p = Period.between(LocalDate.of(2014, 3, 1), d2); 

     System.out 
       .println("period between " + d1.toString() + " and " + d2.toString() + " is " + p.getYears() + " years " 
         + p.getMonths() + " months " + d1.until(LocalDate.of(2014, 3, 1), ChronoUnit.DAYS) + " Days"); 

    } 
} 
+1

あなたは正確に何をしようとしていますか?どのような結果が得られますか?あなたはどんな結果を期待していますか? – Dukeling

答えて

1

あなたはここでは2つの異なる操作を実行します。

Period p = Period.between(d1, d2) 

は(あなたが正しく書式設定オプションを使用している)あなたにこれらの日付の差を出力するうまく整形さ方法を提供します。

d1.until(d2, ChronoUnit.DAYS) 

は同じですが、それほどうまく構成されません(基本的にはLocalDates間の日数が与えられます)。

0

答えている(2014年2月14日と2017年8月1日までの期間は3年5ヶ月18日である)あなたは期待すべきか:

  • それだ3年2014-02-14から2017-02-14
  • へそれが2017-07-14から2017-08-01

0123から18日間です 2017-02-14から 2017-07-14
  • から5ヶ月です

    計算は数年から数か月から数日かけて行われます。これにより、2014-02-142016-02-29の間の年数、月数、日数を計算することができます。これは2年15日です。 14日2014-02-14後にその2014-02-28、15日2014-02-14その2014-03-01後 - 日なし2014-02-29があるので

    あなたは日を計算しようとした場合

    は、まずあなたは、2014-02-142016-02-29の間に年、月と日の数を決定する問題を抱えています。

  • 関連する問題