Calendar的使用(簡單)
您可以使用Date來取得完整的日期時(shí)間顯示,但如果您想要單獨(dú)取得某個(gè)時(shí)間或日期資訊的話該如何?例如您想知道現(xiàn)在是5月的第幾天?
您要使用Calendar類別,在這之前,您要先知道Calendar的一些方法取回的數(shù)字是對(duì)應(yīng)于Calendar本身的常數(shù),也就是說并不是您取回1 這個(gè)數(shù)字,就表示今天是星期一。
想要取得現(xiàn)在的時(shí)間,首先使用Calendar的getInstance()取得一個(gè)Calendar的實(shí)例,例如:
如果現(xiàn)在您想知道現(xiàn)在是西元幾年,則可以使用get()方法并指定常數(shù),例如:
如果現(xiàn)在是2005年,則上例會(huì)顯示2005的數(shù)字,依照這個(gè)例子,假設(shè)撰寫本文的時(shí)間是5月份,而您現(xiàn)在想使用程式取得現(xiàn)在的月份,則下例您可能會(huì)有些困惑:
程式會(huì)顯示4這個(gè)數(shù)字,而不是您預(yù)期的5,因?yàn)閭骰氐?并不是代表月份,而是對(duì)應(yīng)于Calendar.MAY常數(shù)的值, Calendar在月份上的常數(shù)值從Calendar.JANUARY開始是0,到Calendar.DECEMBER的11,所以您如果想要顯示傳回值 的真正意涵,可以如下撰寫:
同樣的,如果您想要取得星期資訊,要記得常數(shù)從Calendar.SUNDAY是1,到Calendar.SATURDAY是7,由于對(duì)應(yīng)的數(shù)并不是從0 開始,所以如果要使用如上的陣列來對(duì)應(yīng)的話,第一個(gè)陣列值就不包括資訊,例如:
總之您要記得傳回的值是對(duì)應(yīng)于Calendar的某個(gè)常數(shù),會(huì)這樣設(shè)計(jì)的原因在于實(shí)際上英文中對(duì)于星期或月份并不附以數(shù)字上的意涵,如Sunday、 Monday等,幸而除了月份、星期之外,傳回的值都對(duì)應(yīng)于真正的時(shí)間意涵,畢竟像西元、小時(shí)、分等等本身就是以數(shù)字表示。
在取得一個(gè)Calendar的實(shí)例后,您可以使用setTime()方法給它一個(gè)Date物件,將之改變?yōu)镈ate目前的時(shí)間,例如:
還可以使用add()方法,來改變Calendar的時(shí)間,例如:
如果打算只針對(duì)日期中某個(gè)欄位加減,則可以使用roll()方法,例如:
在上例中,假設(shè)是2006/10/1,則執(zhí)行過后的Calendar實(shí)例,其中的時(shí)間將是2006/8/1,也就是只改變月份的欄位。
您要使用Calendar類別,在這之前,您要先知道Calendar的一些方法取回的數(shù)字是對(duì)應(yīng)于Calendar本身的常數(shù),也就是說并不是您取回1 這個(gè)數(shù)字,就表示今天是星期一。
想要取得現(xiàn)在的時(shí)間,首先使用Calendar的getInstance()取得一個(gè)Calendar的實(shí)例,例如:
Calendar rightNow = Calendar.getInstance();
如果現(xiàn)在您想知道現(xiàn)在是西元幾年,則可以使用get()方法并指定常數(shù),例如:
System.out.println(rightNow.get(Calendar.YEAR));
如果現(xiàn)在是2005年,則上例會(huì)顯示2005的數(shù)字,依照這個(gè)例子,假設(shè)撰寫本文的時(shí)間是5月份,而您現(xiàn)在想使用程式取得現(xiàn)在的月份,則下例您可能會(huì)有些困惑:
System.out.println(rightNow.get(Calendar.MONTH));
程式會(huì)顯示4這個(gè)數(shù)字,而不是您預(yù)期的5,因?yàn)閭骰氐?并不是代表月份,而是對(duì)應(yīng)于Calendar.MAY常數(shù)的值, Calendar在月份上的常數(shù)值從Calendar.JANUARY開始是0,到Calendar.DECEMBER的11,所以您如果想要顯示傳回值 的真正意涵,可以如下撰寫:
String[] months = {"一月", "二月", "三月", "四月",
"五月", "六月", "七月", "八月",
"九月", "十月", "十一月", "十二月"};
Calendar rightNow = Calendar.getInstance();
System.out.println(months[rightNow.get(Calendar.MONTH)]);
"五月", "六月", "七月", "八月",
"九月", "十月", "十一月", "十二月"};
Calendar rightNow = Calendar.getInstance();
System.out.println(months[rightNow.get(Calendar.MONTH)]);
同樣的,如果您想要取得星期資訊,要記得常數(shù)從Calendar.SUNDAY是1,到Calendar.SATURDAY是7,由于對(duì)應(yīng)的數(shù)并不是從0 開始,所以如果要使用如上的陣列來對(duì)應(yīng)的話,第一個(gè)陣列值就不包括資訊,例如:
String[] dayOfWeek = {"", "日", "一", "二",
"三", "四", "五", "六"};
Calendar rightNow = Calendar.getInstance();
System.out.println(dayOfWeek[
rightNow.get(Calendar.DAY_OF_WEEK)]);
"三", "四", "五", "六"};
Calendar rightNow = Calendar.getInstance();
System.out.println(dayOfWeek[
rightNow.get(Calendar.DAY_OF_WEEK)]);
總之您要記得傳回的值是對(duì)應(yīng)于Calendar的某個(gè)常數(shù),會(huì)這樣設(shè)計(jì)的原因在于實(shí)際上英文中對(duì)于星期或月份并不附以數(shù)字上的意涵,如Sunday、 Monday等,幸而除了月份、星期之外,傳回的值都對(duì)應(yīng)于真正的時(shí)間意涵,畢竟像西元、小時(shí)、分等等本身就是以數(shù)字表示。
在取得一個(gè)Calendar的實(shí)例后,您可以使用setTime()方法給它一個(gè)Date物件,將之改變?yōu)镈ate目前的時(shí)間,例如:
Calendar c = Calendar.getInstance();
Date date = new Date(10000000000L);
c.setTime(date);
Date date = new Date(10000000000L);
c.setTime(date);
還可以使用add()方法,來改變Calendar的時(shí)間,例如:
c.add(Calendar.MONTH, 1); // 目前時(shí)間加1個(gè)月
c.add(Calendar.HOUR, 3); // 目前時(shí)間加3小時(shí)
c.add(Calendar.YEAR, -2); // 目前時(shí)間減2年
c.add(Calendar.DAY_OF_WEEK, 3); // 目前的時(shí)間加3天
c.add(Calendar.HOUR, 3); // 目前時(shí)間加3小時(shí)
c.add(Calendar.YEAR, -2); // 目前時(shí)間減2年
c.add(Calendar.DAY_OF_WEEK, 3); // 目前的時(shí)間加3天
如果打算只針對(duì)日期中某個(gè)欄位加減,則可以使用roll()方法,例如:
c.roll(Calendar.MONTH, 10); // 只增加月的欄位值為10個(gè)月
在上例中,假設(shè)是2006/10/1,則執(zhí)行過后的Calendar實(shí)例,其中的時(shí)間將是2006/8/1,也就是只改變月份的欄位。
posted on 2007-10-11 13:34 advincenting 閱讀(570) 評(píng)論(0) 編輯 收藏