0

の TreeMap があり<DDate, Integer>ます。

DDate には月と年のみが含まれます (Java のように、月は 0 でインデックス化され、JAN = 0);

私の比較は正しいものを返していません:

@Override
public int compareTo(DDDate o) {

    Calendar cal1 = Calendar.getInstance();
    cal1.setTimeZone(TimeZone.getTimeZone("UTC"));
    cal1.set(year, month, 1); // year is 2012, month is 1

    Calendar cal2 = Calendar.getInstance();
    cal2.setTimeZone(TimeZone.getTimeZone("UTC"));
    cal2.set(o.getYear(), o.getMonth(), 1); // year is 2012, month is 1


    Log.log("COMPARING: " + format.format(cal1.getTime())); // COMPARING: 20120101
    Log.log("COMPARING: " + format.format(cal2.getTime())); // COMPARING: 20120101

    Log.log((cal1.getTime().getTime())); // 1325413927678
    Log.log((cal2.getTime().getTime())); // 1325413927679

    Log.log("WILL RETURN: " + cal1.getTime().compareTo(cal2.getTime())); // WILL RETURN: -1

    return cal1.getTime().compareTo(cal2.getTime());

}

同じ Date に対して 2 つの Calendar オブジェクトに不一致があるのはなぜですか? (1325413927678 対 1325413927679)

ありがとうございました!

参考までに、この方法はしばらくの間機能しますが、ある時点で機能しなくなります。

PS - 私はこれがやり過ぎであることを理解しています。

編集 - 修正

JodaTime の LocalDate を使用します。

または、次のようにします。

Calendar cal1 = Calendar.getInstance();
cal1.setTimeZone(TimeZone.getTimeZone("UTC"));
cal1.clear();
cal1.set(year, month, 1); // year is 2012, month is 1
4

5 に答える 5

0

カレンダーを「時間なし」(0 ティック) に適切に初期化する必要があります。これで問題が解決するはずです。

cal1.setTime(new Date(0));
cal1.set(year, month, 1);
于 2013-10-28T14:42:52.713 に答える
0

日付を設定する前に clear() メソッドを使用してみてください。

final Calendar cal1 = Calendar.getInstance();
cal1.clear();
cal1.setTimeZone(TimeZone.getTimeZone("UTC"));
cal1.set(2012, 1, 1); // year is 2012, month is 1

final Calendar cal2 = Calendar.getInstance();
cal2.clear();
cal2.setTimeZone(TimeZone.getTimeZone("UTC"));
cal2.set(2012, 1, 1); // year is 2012, month is 1

cal1.getTime().compareTo(cal2.getTime()); // Returns 0
于 2013-10-28T14:57:55.723 に答える