簡體   English   中英

比較Calendar和java.util.date日期

[英]Compare Calendar and java.util.date dates

嗨,我正在使用以下方法創建Calendar實例:

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));

它打印-1和1而不是0(零)。
誰能幫我找出問題所在?

嘗試在設置新日歷之前清除日歷的值。 這樣可以解決您的問題。

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)));
    }

}

日期和日歷類別不同。 不推薦使用java.util.Date的大多數方法。 因此,最好使用Calender類。 有關方法的更多信息,請查看以下網址。 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

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

相比於

返回:如果參數是一個等於此Date的Date,則返回值0;否則,返回0。 如果參數是此日期之后的日期,則該值小於0; 如果參數是該日期之前的日期,則該值大於0。

除使用不建議使用的構造函數外,日期均為格林尼治標准時間。 這里會有區別,因為您還需要將毫秒設置為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

注意:日歷將保留您未設置的任何字段,因此第一個set()將使毫秒保持不變。

date1在哪里創建的? 您似乎假設日歷和日期相關。 他們不是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM