[英]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.