2009-03-27 9 views
1

[OK]を、私は正式にこの1つに困っています。私はGregorianCalendarオブジェクトを持っています。これは、それが過去、現在、または将来にあるかどうかを判断したいと思います。これまでのところ、Calendar#compareToのドキュメントは私には混乱しています。私は不安定な結果を得ています。簡単なテストクラスは私の問題を説明します:Java 1.5 Calendar#compareTo()confusion

import java.util.Calendar; 
import java.util.GregorianCalendar; 
public class MyCal 
{ 

     public static void main(String[] args) 
     { 
       GregorianCalendar datePast = new GregorianCalendar(); 
       datePast.add(Calendar.MONTH, -6); // subtract 6 months 
       GregorianCalendar datePresent = new GregorianCalendar(); 
       GregorianCalendar dateFuture = new GregorianCalendar(); 
       datePast.add(Calendar.MONTH, 6); // add 6 months 

       System.out.println("compare datePresent to datePast: "+datePresent.compareTo(datePast)); 
       System.out.println("compare datePresent to datePresent: "+datePresent.compareTo(datePresent)); 
       System.out.println("compare datePresent to dateFuture: "+datePresent.compareTo(dateFuture)); 
     } 
} 

そして出力:

compare datePresent to datePast: 1 
compare datePresent to datePresent: 0 
compare datePresent to dateFuture: 0 

のcompareToの私の理解では、最後の行は-1でなければならないことです。誰かが私が間違っていることを教えてもらえますか?

答えて

2

datePastに6ヶ月追加しました.dateFutureではありません。ここでは、作業コードです:は時々dateFutureは内部クロックが「チェックさ」ときに応じて、datePresentより後になるので

import java.util.Calendar; 
import java.util.GregorianCalendar; 
public class MyCal 
{ 

    public static void main(String[] args) 
    { 
     GregorianCalendar datePast = new GregorianCalendar(); 
     datePast.add(Calendar.MONTH, -6); // subtract 6 months 
     GregorianCalendar datePresent = new GregorianCalendar(); 
     GregorianCalendar dateFuture = new GregorianCalendar(); 
     dateFuture.add(Calendar.MONTH, 6); // add 6 months 

     System.out.println("compare datePresent to datePast: "+datePresent.compareTo(datePast)); 
     System.out.println("compare datePresent to datePresent: "+datePresent.compareTo(datePresent)); 
     System.out.println("compare datePresent to dateFuture: "+datePresent.compareTo(dateFuture)); 
    } 
} 

あなたの結果は一貫していないでしょう。

これに加えて、私はJavaの標準的な日付と時刻のアドバイスを手伝ってくれません。代わりにJoda Timeを使用してください。多くの型が不変であるという事実が助けになったにもかかわらず、この特定の問題については責任を負いません。しかし、一般的にそれは多くのライブラリです。

+0

うわー、私はばかげてばかと思います。ありがとうジョン。 – localshred

+0

誰かがJoda Timeに言及している人が少なくとも1人もいなくても、Java DateまたはCalendarについてSOの質問をすることは誰にも不可能ですか? SOの飲酒ゲームがあった場合、これはルール1になります。 –

+0

私は新しい質問を作成するか、これを変更する必要がありますか? – localshred