1. 程式人生 > >淺談Calendar類

淺談Calendar類

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;
	}	
}