java.util.Calendar的MilliSecond域表示1/1000秒,理論取值範圍是0-999。Calendar提供set(int field, int value)
方法可以對Calendar的各個域進行設置,設置MilliSecond域可以這樣做:set(Calendar.MILLISECOND, 234)。一般value爲0-999中的一個值,但如果將一個大於或等於1000的值傳入以上調用會有什麼結果呢?看以下代碼就清楚了。
代碼:
-------------------------------------------------------------------------------------------------------------
package com.leo.testcalendar;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Calendar calendar = Calendar.getInstance();
System.out.println("1.Origin");
calendar.set(2009, Calendar.SEPTEMBER, 1, 0, 0, 0);
System.out.println("Calendar is : " + format.format(calendar.getTime()));
System.out.println("MilliSecond is: " + calendar.get(Calendar.MILLISECOND));
System.out.println();
System.out.println("2.Set MilliSecond to 456");
calendar.set(Calendar.MILLISECOND, 456);
System.out.println("Calendar is : " + format.format(calendar.getTime()));
System.out.println("MilliSecond is: " + calendar.get(Calendar.MILLISECOND));
System.out.println();
System.out.println("3.Set MilliSecond to 1000");
calendar.set(Calendar.MILLISECOND, 1000);
System.out.println("Calendar is : " + format.format(calendar.getTime()));
System.out.println("MilliSecond is: " + calendar.get(Calendar.MILLISECOND));
System.out.println();
System.out.println("4.Set MilliSecond to 2222");
calendar.set(Calendar.MILLISECOND, 2222);
System.out.println("Calendar is : " + format.format(calendar.getTime()));
System.out.println("MilliSecond is: " + calendar.get(Calendar.MILLISECOND));
System.out.println();
System.out.println("5.Set Second to 70");
calendar.set(Calendar.SECOND, 70);
System.out.println("Calendar is : " + format.format(calendar.getTime()));
System.out.println("Second is: " + calendar.get(Calendar.SECOND));
System.out.println();
System.out.println("6.Print Long type value of Calendar");
System.out.println("Long type value of Calendar is : " + calendar.getTime().getTime());
}
}
-------------------------------------------------------------------------------------------------------------
結果
-------------------------------------------------------------------------------------------------------------
1.Origin
Calendar is : 2009-09-01 00:00:00.847
MilliSecond is: 847
2.Set MilliSecond to 456
Calendar is : 2009-09-01 00:00:00.456
MilliSecond is: 456
3.Set MilliSecond to 1000
Calendar is : 2009-09-01 00:00:01.000
MilliSecond is: 0
4.Set MilliSecond to 2222
Calendar is : 2009-09-01 00:00:03.222
MilliSecond is: 222
5.Set Second to 70
Calendar is : 2009-09-01 00:01:10.222
Second is: 10
6.Print Long type value of Calendar
Long type value of Calendar is : 1251763270222
-------------------------------------------------------------------------------------------------------------
結論:
由於在java中,時間相關的類型最終存儲在Long型中,而MilliSecond在其中僅佔用最後3位,如果在設置MilliSecond時,超出了3位數的範圍,那麼會繼續佔用其他域的位。所以,在調用set(Calendar.MILLISECOND, value)時,除非明確知道自己的意圖,否則,不用使用超出理論範圍的值去設置MILLISECOND。對於其他的域也同樣適用,如結果中的第5點。