另一個奇怪的行爲,看看一段代碼波紋管:與GregorianCalendar的
Calendar today1 = Calendar.getInstance();
today1.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
System.out.println(today1.getTime());
Calendar today2 = new GregorianCalendar(2010, Calendar.JULY, 14);
today2.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
System.out.println(today2.getTime());
我很迷茫......假設我今天跑它作爲2010年7月14日,輸出爲:
Fri Jul 16 14:23:23 PDT 2010
Wed Jul 14 00:00:00 PDT 2010
最煩人的是,如果我添加today2.getTimeInMillis()(或任何其他get()方法)它將產生一致的結果。對於代碼波紋管:
Calendar today2 = new GregorianCalendar(2010, Calendar.JULY, 14);
today2.getTimeInMillis();
today2.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
System.out.println(today2.getTime());
結果是:
Fri Jul 16 00:00:00 PDT 2010
'日曆'確實延遲加載,但這不*實際*解釋問題。爲什麼它不適用於'新的GregorianCalendar(y,m,d)',但它可以與'set(y,m,d)'配合使用? – BalusC 2010-07-14 22:33:04
是的,它的確解釋了。 這是因爲在GregorianCalendar(y,m,d)中,您還沒有計算WEEK_OF_YEAR。在set(y,m,d)中,您首先調用了Calendar.getInstance(),它爲我們提供了一個填充了所有字段的對象。 – 2010-08-17 18:12:01