Calendar類實個挺神奇的類,具體原因也沒有細究,記一下它的用法。
Calendar類是一個基於Date類的類,它其中用到了Date,並且有相應的方法。而Calendar比Date增加了一些更通用的甚至,比如可以單獨甚至年月日。
新建一個(假)實例
和其他很多函數用法不一樣,Calendar不用new來新建一個實例,而是用Calendar.getInstance(),因爲某些原因所以我叫它(假)實例。
Calendar c = Calendar.getInstance();
這樣我們就擁有了一個時間爲現在時間的Calendar類c了。
設置時間
Calendar有兩種設置方法。
調用set
第一種調用set,用法是set(變量,值)
變量可以是Calendar.HOUR, Calendar.YEAR 等。
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2019);
這樣年份就變成了2019
調用setTime
setTime就是一個和Date有關的方法了,它的傳參是一個Date類,爲什麼要用Date呢,因爲Date的日期計算方式是距離一個年份的毫秒數,個人猜測比較方便。
用法就是setTime(date)
Calendar c = Calendar.getInstance();
Date d = new Date();
c.setTime(d);
複製另一個Calendar時間
Calendar有一個方法是getTime()返回的是一個Date類,和setTime很像,因此我的解決方法如下:
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(c2.getTime());
Assert的使用
這裏就是爲什麼我認爲我們構建的是一個(假)實例了。
閱讀下述代碼:
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
assertEquals(c1, c2);
它是不會報錯的,十分神奇。。
再看另一端代碼:
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.set(Calendar.YEAR, 1999);
assertEquals(c1, c2);
當我們修改了年份以後,它是會報錯的。
因此,我們得出的結論對於Calendar的assert,它只是對比了日期是否相同,並不對比指針是否一致