Java 1.5 Calendar#compareTo() の混乱
-
22-08-2019 - |
質問
OK、私は正式にこれで困っています。GregorianCalendar オブジェクトがあり、それが過去、現在、未来のいずれであるかを判断したいと考えています。これまでのところ、 カレンダー#比較先 不安定な結果が得られるため、ドキュメントは私にとって混乱を招きます。簡単なテストクラスで私の問題を説明します。
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 でなければならないということです。誰か私が間違っていることを教えてもらえますか?
解決
6 か月追加されました datePast
, 、 ない dateFuture
. 。動作するコードは次のとおりです。
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));
}
}
結果は矛盾したものになるでしょう。 時々 dateFuture
より遅くなります datePresent
, 、内部時計がいつ「時を刻む」かに応じて。
これらすべてに加えて、私は標準的な Java 日時に関するアドバイスを与えずにはいられません。使用 ジョーダタイム その代わり。これはこの特定の問題の原因ではありませんが、型の多くが不変であるという事実は役に立ちます。しかし、一般的には、 多くの より良い図書館。
所属していません StackOverflow