2012-01-03 15 views
0

Joda-TimeライブラリのdaysBetween関数の実行結果が矛盾しています。他の誰も同じ問題を抱えていますか?以下は私がテストに使用するコードです。Joda時間と矛盾する結果

public static int elapsedDaysJoda() { 
    DateTime dt1 = new DateTime(new Date());   
    Calendar cal = Calendar.getInstance(); 
    cal.set(2011, 0, 1); 
    DateTime dt2 = new DateTime(cal.getTime()); 
    Days days = Days.daysBetween(dt2, dt1); 
    return days.getDays(); 
} 

public static void main(String[] args) { 
    for(int i=0; i < 10; i++) { 
     System.out.println(elapsedDaysJoda()); 
    } 
} 

答えて

3

まず、および主な問題:あなたはnew Date()にし、Calendar.getInstance()で、二回「現在日時」用のJavaを求めている、と彼らができるならば、あなたは正確に同じ瞬間、この2つのコールが返されることを確認することかできません数ミリ秒で違います。

さらに、LocalDateの代わりにDateTimeを使用しているため、数ミリ秒の違いが経過日の計算を変更する可能性があります。あなたが(概念的に)日々の違いを扱っていて、時(h:m:s.sss)を気にしないのであれば、おそらくLocalDateをよく使うべきです。

最初の問題は、一度だけのJava現在datimeを求めることによって解決することができます。また

public static int elapsedDaysJoda() { 
    Calendar cal = Calendar.getInstance(); 
    DateTime dt1 = new DateTime(cal); 
    cal.set(2011, 0, 1); 
    DateTime dt2 = new DateTime(cal.getTime()); 
    Days days = Days.daysBetween(dt2, dt1); 
    return days.getDays(); 
} 

(あるいは、これはまた、一貫性のない結果を修正)、あなたはLocalDateの代わりDateTimeを使用することができます。

+0

あなたの明確な説明をありがとう。 LocalDateは私が必要なものです。 – carbotex

関連する問題