淺談Calendar類
阿新 • • 發佈:2018-12-29
Calendar類是什麼
在日常編寫程式碼的時候,很多時候需要用到時間,比如你登入一個網頁,網頁會顯示
xxxx年-xx月-xx日 HH:mm:ss 會顯示這樣的一個時間提示,還有一些銀行系統,會提示你明天你的存款到賬之類的操作,這個時候就用到了我我們的Calendar類
Calendar類的初始化
因為Calendar類被abstract修飾,所以不能例項化物件,這個時候就有一個方法可以直接初始化當前日曆的時間
Calendar cld=Calendar.getInstance();
這裡的getInstance() 返回的實質上是Calendar的子類,因為每個國家都有自己的一套演算法
Calendar類的常用方法
public class demo2 { public static void main(String[] args) { Calendar cld=Calendar.getInstance(); //獲取到當前的時間 System.out.println("今年:"+cld.get(Calendar.YEAR)); System.out.println("本月:"+cld.get(Calendar.MONTH)+1); //因為月份預設的是0開始,所以輸出時候要+1 System.out.println("本日:"+cld.get(Calendar.DATE)); System.out.println("本週第幾天:"+cld.get(Calendar.DAY_OF_WEEK)); //因為國外的一週是從星期天開始的,到星期六結束 System.out.println("12小時制的時:"+cld.get(Calendar.HOUR)); System.out.println("24小時制的時:"+cld.get(Calendar.HOUR_OF_DAY)); System.out.println("分鐘:"+cld.get(Calendar.MINUTE)); System.out.println("秒:"+cld.get(Calendar.SECOND)); cld.clear(); //此 Calendar 的所日曆欄位值和時間值(從曆元至現在的毫秒偏移量)設定成未定義。 System.out.println("格林年:"+cld.get(Calendar.YEAR)); System.out.println("格林月:"+cld.get(Calendar.MONTH)+1); System.out.println("格林日:"+cld.get(Calendar.DATE)); } }
以上的輸出:
今年:2018
本月:111
本日:28
本週第幾天:6
12小時制的時:2
24小時制的時:14
分鐘:44
秒:31
格林年:1970
格林月:01
格林日:1
Calendar類和Date的轉換
(1) Calendar轉化為Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
(2) Date轉化為Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
add和roll的區別
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
System.out.println("當前時間:"+sdf.format(date));
cal.add(Calendar.DATE, -4);
date=cal.getTime();
System.out.println("add後時間:"+sdf.format(date));
cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println("add後時間:"+sdf.format(date));
以上輸出:
當前時間:2018-12-28
add後時間:2018-12-24
add後時間:2018-12-28
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
System.out.println("當前時間:"+sdf.format(date));
cal.roll(Calendar.DATE, 4);
date=cal.getTime();
System.out.println("roll後時間:"+sdf.format(date));
以上輸出:
當前時間:2018-12-28
roll後時間:2018-12-01
總結:
roll()是在當前月進行的迴圈,而add()是依次迴圈
計算兩個日期相隔多少天
public class demo2 {
public static void main(String[] args) {
Calendar cld=Calendar.getInstance(); //獲取到當前的時間
Calendar cld1=Calendar.getInstance();
cld1.set(2017,11,28);
System.out.println(getDaysBetween(cld,cld1));
}
public static int getDaysBetween (Calendar d1, Calendar d2) {
if (d1.after(d2)) {
Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
for(;d1.get(Calendar.YEAR) != y2;d1.add(Calendar.YEAR, 1)) {
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到當年的實際天數
}
return days;
}
}