2

こんにちは、次を使用してカレンダーのインスタンスを作成しています:

Calendar calendarDate=Calendar.getInstance();
            calendarDate.set(2012, 6, 1,0,0,0);
                Date date1=calendar.getTime();

その後、次を使用して java.util.date のインスタンスを作成します。

Date date2=new Date(2012 - 1900,7-1, 01);

今、次のコードを使用して日付を比較しようとしています:

System.out.println(date2.compareTo(date1));
System.out.println(date1.compareTo(date2));

0 (ゼロ) の代わりに -1 と 1 を出力します。
何が問題なのかを見つけるのを手伝ってくれる人はいますか?

4

5 に答える 5

5

新しいカレンダーを設定する前に、カレンダーの値をクリアしてみてください。これで問題は解決します。

Calendar calendarDate=Calendar.getInstance();
calendarDate.clear();
calendarDate.set(2012, 6, 1,0,0,0);

それをテストします。

import java.util.Calendar;
import java.util.Date;

import org.junit.Assert;

public class DateTest {

    @org.junit.Test
    public void test() {
        Calendar calendarDate=Calendar.getInstance();
        calendarDate.clear();
        calendarDate.set(2012, 6, 1,0,0,0);
        Assert.assertEquals(0, calendarDate.getTime().compareTo(new Date(2012 - 1900,7-1, 01)));
    }

}
于 2012-07-18T13:07:24.377 に答える
2

Date クラスと Calender クラスは異なります。java.util.Date のほとんどのメソッドは非推奨です。したがって、Calender クラスを使用することをお勧めします。メソッドの詳細については、以下の URL を参照してください。 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

于 2012-07-18T13:32:22.447 に答える
1

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html#compareTo(java.lang.Object)

compareTo

Returns: the value 0 if the argument is a Date equal to this Date; a value less than 0 if the argument is a Date after this Date; and a value greater than 0 if the argument is a Date before this Date.

于 2012-07-18T13:05:42.417 に答える
0

非推奨のコンストラクターを使用する場合を除き、日付は GMT です。ミリ秒も 0 に設定する必要があるため、ここで違いがあります。

Calendar calendarDate=Calendar.getInstance(TimeZone.getTimeZone("GMT"));
calendarDate.set(2012, Calendar.JULY, 1,0,0,0);
calendarDate.set(Calendar.MILLISECOND, 0);
Date date1 = calendarDate.getTime();
Date date2=new Date(2012 - 1900,7-1, 1, 1, 0, 0);
System.out.println(date1);
System.out.println(date2);
System.out.println(date2.compareTo(date1));
System.out.println(date1.compareTo(date2));

版画

Sun Jul 01 01:00:00 BST 2012
Sun Jul 01 01:00:00 BST 2012
0
0

注: Calendar は、設定していないフィールドをすべてそのままにするため、最初の set() ではミリ秒は変更されません。

于 2012-07-18T13:05:31.303 に答える
0

date1 はどこで作成されますか? Calendar と Date が関連していると思われるようです。ではない。

于 2012-07-18T13:06:26.267 に答える