Calendar的用方法

package com.koal.test.calendar;


import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;


public class TestCalendar {


public static void main(String[] args) {

testCalendarGet();
testCalendarSet();


}



/**獲取時間*/
public static void testCalendarGet(){

Calendar calendar = Calendar.getInstance();

System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH)+1);
System.out.println(calendar.get(Calendar.MONDAY)+1);
System.out.println(calendar.get(Calendar.DATE));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.HOUR));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.SECOND));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));//一星期的第幾天,5代表週四
System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_MONTH));//一月的天數
;
}

/**設置時間*/
public static void testCalendarSet(){
Calendar calendar = Calendar.getInstance();
calendar.set(2015, 10, 20);
System.out.println(calendar.get(Calendar.MONDAY));
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.DAY_OF_MONTH, 5);
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.MONTH));

//add()   c.add(Calendar.DATE, X);
//去指定天數的時期,取過去天的日期用負數,取未來天數日期用正數,在"X"處天下
//如 c.add(Calendar.DATE, -1)去當前日期前一天的日期 
calendar.add(Calendar.YEAR, -10);
System.out.println(calendar.get(Calendar.YEAR));
}


//java中關於時間日期操作的常用函數 
//1.計算某一月份的最大天數 
public static void method11(){

Calendar time=Calendar.getInstance(); 
time.clear(); 
time.set(Calendar.YEAR,11); 
time.set(Calendar.MONTH,-1);//注意,Calendar對象默認一月爲0 
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數 
}
//注:在使用set方法之前,必須先clear一下,否則很多信息會繼承自系統當前時間 
//2.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); 
// 3.格式化輸出日期時間 
// Date date=new Date(); 
// SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
// System.out.println(df.format(date)); 
// 4.計算一年中的第幾星期 
// (1)計算某一天是一年中的第幾星期 
// Calendar cal=Calendar.getInstance(); 
// cal.set(Calendar.YEAR, 2006); 
// cal.set(Calendar.MONTH,; 
// cal.set(Calendar.DAY_OF_MONTH, 3); 
// int weekno=cal.get(Calendar.WEEK_OF_YEAR); 
// (2)計算一年中的第幾星期是幾號 
// SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 
// Calendar cal=Calendar.getInstance(); 
// cal.set(Calendar.YEAR, 2006); 
// cal.set(Calendar.WEEK_OF_YEAR, 1); 
// cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
// System.out.println(df.format(cal.getTime())); 
// 輸出: 
// 2006-01-02 
// 5.add()和roll()的用法 
// (1)add()方法 
// SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 
// Calendar cal=Calendar.getInstance(); 
// cal.set(Calendar.YEAR, 2006); 
// cal.set(Calendar.MONTH,; 
// cal.set(Calendar.DAY_OF_MONTH, 3); 
// cal.add(Calendar.DATE, -4); 
// Date date=cal.getTime(); 
// System.out.println(df.format(date)); 
// cal.add(Calendar.DATE, 4); 
// date=cal.getTime(); 
// System.out.println(df.format(date)); 
// 輸出: 
// 2006-08-30 
// 2006-09-03 
// (2)roll方法 
// cal.set(Calendar.YEAR, 2006); 
// cal.set(Calendar.MONTH,; 
// cal.set(Calendar.DAY_OF_MONTH, 3); 
// cal.roll(Calendar.DATE, -4); 
// date=cal.getTime(); 
// System.out.println(df.format(date)); 
// cal.roll(Calendar.DATE, 4); 
// date=cal.getTime(); 
// System.out.println(df.format(date)); 
// 輸出: 
// 2006-09-29 
// 2006-09-03 
// 可見,roll()方法在本月內循環,一般使用add()方法; 
// 6.計算兩個任意時間中間的間隔天數 
// (1)傳進Calendar對象 


/** *//**計算兩個時間之間相隔天數 
* @param startday 開始時間 
* @param endday 結束時間 
* @return 
*/ 
public int getIntervalDays(Calendar startday,Calendar endday){ 
//確保startday在endday之前 
if(startday.after(endday)){ 
Calendar cal=startday; 
startday=endday; 
endday=cal; 

//分別得到兩個時間的毫秒數 
long sl=startday.getTimeInMillis(); 
long el=endday.getTimeInMillis(); 


long ei=el-sl; 
//根據毫秒數計算間隔天數 
return (int)(ei/(1000*60*60*24)); 



//(2)傳進Date對象 
/** *//**計算兩個時間之間相隔天數 
* @param startday 開始時間 
* @param endday 結束時間 
* @return 
*/ 
public int getIntervalDays(Date startday,Date endday){ 
//確保startday在endday之前 
if(startday.after(endday)){ 
Date cal=startday; 
startday=endday; 
endday=cal; 

//分別得到兩個時間的毫秒數 
long sl=startday.getTime(); 
long el=endday.getTime(); 


long ei=el-sl; 
//根據毫秒數計算間隔天數 
return (int)(ei/(1000*60*60*24)); }
// }同理,可以用相同的方法計算出任意兩個時間相隔的小時數,分鐘數,秒鐘數等 
// 注:以上方法是完全按時間計算,有時並不能令人滿意,如: 
// startday="2006-10-11 20:00:00" 
// endday="2006-10-12 8:00:00" 
// 計算結果爲0,但是我們也許相讓計算結果變爲1,此時可以用如下方法實現: 
// 在傳參之前,先設定endday的時間,如: 
// endday.set(Calendar.HOUR_OF_DAY, 23); 
// endday.set(Calendar.MINUTE, 59); 
// endday.set(Calendar.SECOND, 59); 
// endday.set(Calendar.MILLISECOND, 59); 
// 這樣再傳進去startday,endday,則結果就如我們所願了。不過,如果嫌以上方法麻煩,可以參考以下方法: 
// (3)改進精確計算相隔天數的方法 
// public int getDaysBetween (Calendar d1, Calendar d2) ...{ 
// if (d1.after(d2)) ...{ // swap dates so that d1 is start and d2 is end 
// java.util.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); 
// if (d1.get(Calendar.YEAR) != y2) ...{ 
// d1 = (Calendar) d1.clone(); 
// do ...{ 
// days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到當年的實際天數 
// d1.add(Calendar.YEAR, 1); 
// } while (d1.get(Calendar.YEAR) != y2); 
//
// return days; 
//
// 2007-04-24 14:34 作者: JAVA-HE   
// re: JAVA 一句話技巧(不斷補充中) 
// JAVA中日期格式化 分類:java 基礎時間格式化 
// 一、JAVA中日期的獲取、設置和格式化 
// 1)JAVA提供了3個日期類:Date、Calendar和DateFormat。 
// Date()方法主要用於創建日期對象並獲取日期; 
// Calendar()方法主要用於獲取和設置日期; 
// DateFormat()方法主要用於創建日期格式化器,然後再由格式化器將日期轉換爲各種日期格式串輸出。 
// 2)JAVA語言規定的基準日期爲格林尼治標準時間1970.1.1.00:00:00,當前日期是由基準日期開始所經歷的毫秒數轉換出來的。 
// 3)DateFomat類在java.text包中,Date和Calendar類在java.util包中。 
// 4)實例如下: 


public void method1(){
Date today; 
Calendar now; 
DateFormat f1,f2; 
String s1,s2; 


System.out.println("\n顯示Date類的相關用法"); 


today = new Date(); 
System.out.println("new Date()= \t"+ today); 


System.out.println("\n用DateFormat類顯示各種日期格式"); 


//顯示各種日期格式 
f1 = DateFormat.getDateInstance(); 
s1 = f1.format(today); 
System.out.println("DateFormat.getDateInstance()= \t"+s1); 


f1 = DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA); 
s1 = f1.format(today); 
System.out.println("DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA)= \t"+ s1); 


f1 = DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA); 
s1 = f1.format(today); 
System.out.println("DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA)= \t"+ s1); 


f1 = DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA); 
s1 = f1.format(today); 
System.out.println("DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA)= \t" + s1); 


System.out.println("\n用DateFormat類顯示各種時間格式"); 


//顯示各種時間格式 
f1 = DateFormat.getTimeInstance(); 
s1 = f1.format(today); 
System.out.println("DateFormat.getTimeInstance()= \t"+s1); 


f1 = DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA); 
s1 = f1.format(today); 
System.out.println("DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA)= \t"+s1); 


f1 = DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA); 
s1 = f1.format(today); 
System.out.println("DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA)= \t"+s1); 


f1 = DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA); 
s1 = f1.format(today); 
System.out.println("DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA)= \t"+s1); 


System.out.println("\n顯示Calendar的相關時間用法"); 


now = Calendar.getInstance(); 
today = now.getTime(); 
System.out.println("Calendar.getInstance().getTime()= \t"+ today.toString()); }


 



// 程序運行結果顯示如下: 
//
// 顯示Date類的相關用法 
// new Date()= Fri May 02 13:29:32 CST 2003 
//
// 用DateFormat類顯示各種日期格式 
// DateFormat.getDateInstance()= 2003-5-2 
// DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA)= 2003年5月2日 
// DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA)= 2003-5-2 
// DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA)= 03-5-2 
//
// 用DateFormat類顯示各種時間格式 
// DateFormat.getTimeInstance()= 13:29:32 
// DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA)= 下午01時29分32秒 
// DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA)= 13:29:32 
// DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA)= 下午1:29 
//
// 顯示Calendar的相關時間用法 
// Calendar.getInstance().getTime()= Fri May 02 13:29:33 CST 2003 
//
// *********************************************************************************轉帖 
// Java 語言的Calendar(日曆),Date(日期), 和DateFormat(日期格式)組成了Java標準的一個基本但是非常重要的部分. 日期是商業邏輯計算一個關鍵的部分. 所有的開發者都應該能夠計算未來的日期, 定製日期的顯示格式, 並將文本數據解析成日期對象. 我們寫了兩篇文章, 這是第一篇, 我們將大概的學習日期, 日期格式, 日期的解析和日期的計算. 
//
//
// 我們將討論下面的類: 
//
// 1、具體類(和抽象類相對)java.util.Date 
// 2、抽象類java.text.DateFormat 和它的一個具體子類,java.text.SimpleDateFormat 
// 3、抽象類java.util.Calendar 和它的一個具體子類,java.util.GregorianCalendar 
//
// 具體類可以被實例化, 但是抽象類卻不能. 你首先必須實現抽象類的一個具體子類. 
//
// Date 類從Java 開發包(JDK) 1.0 就開始進化, 當時它只包含了幾個取得或者設置一個日期數據的各個部分的方法, 比如說月, 日, 和年. 這些方法現在遭到了批評並且已經被轉移到了Calendar類裏去了, 我們將在本文中進一步討論它. 這種改進旨在更好的處理日期數據的國際化格式. 就象在JDK 1.1中一樣, Date 類實際上只是一個包裹類, 它包含的是一個長整型數據, 表示的是從GMT(格林尼治標準時間)1970年, 1 月 1日00:00:00這一刻之前或者是之後經歷的毫秒數. 
//


// 一、創建一個日期對象 


// 讓我們看一個使用系統的當前日期和時間創建一個日期對象並返回一個長整數的簡單例子. 這個時間通常被稱爲Java 虛擬機(JVM)主機環境的系統時間. 
// import java.util.Date; 


//public class DateExample1 { 
// /public static void main(String[] args) { 
// // Get the system date/time 
// Date date = new Date(); 


// System.out.println(date.getTime()); 
//
//


// 在星期六, 2001年9月29日, 下午大約是6:50的樣子, 上面的例子在系統輸出設備上顯示的結果是 1001803809710. 在這個例子中,值得注意的是我們使用了Date 構造函數創建一個日期對象, 這個構造函數沒有接受任何參數. 而這個構造函數在內部使用了System.currentTimeMillis() 方法來從系統獲取日期. 
//
// 那麼, 現在我們已經知道了如何獲取從1970年1月1日開始經歷的毫秒數了. 我們如何才能以一種用戶明白的格式來顯示這個日期呢? 在這裏類java.text.SimpleDateFormat 和它的抽象基類 java.text.DateFormat 就派得上用場了. 
//


// 二、日期數據的定製格式 
//
// 假如我們希望定製日期數據的格式, 比方星期六-9月-29日-2001年. 下面的例子展示瞭如何完成這個工作: 
//
// import java.text.SimpleDateFormat; 
// import java.util.Date; 
//
// public class DateExample2 { 
//
// public static void main(String[] args) { 
//
// SimpleDateFormat bartDateFormat = 
// new SimpleDateFormat("EEEE-MMMM-dd-yyyy"); 
//
// Date date = new Date(); 
//
// System.out.println(bartDateFormat.format(date)); 
//
//
//
// 只要通過向SimpleDateFormat 的構造函數傳遞格式字符串"EEE-MMMM-dd-yyyy", 我們就能夠指明自己想要的格式. 你應該可以看見, 格式字符串中的ASCII 字符告訴格式化函數下面顯示日期數據的哪一個部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的個數決定了日期是如何格式化的.傳遞"EE-MM-dd-yy"會顯示 Sat-09-29-01. 請察看Sun 公司的Web 站點獲取日期格式化選項的完整的指示. 
//
//
// 三、將文本數據解析成日期對象 
//
// 假設我們有一個文本字符串包含了一個格式化了的日期對象, 而我們希望解析這個字符串並從文本日期數據創建一個日期對象. 我們將再次以格式化字符串"MM-dd-yyyy" 調用SimpleDateFormat類, 但是這一次, 我們使用格式化解析而不是生成一個文本日期數據. 我們的例子, 顯示在下面, 將解析文本字符串"9-29-2001"並創建一個值爲001736000000 的日期對象. 
//
// 例子程序: 
//




public static void main3(String[] args) { 
// Create a date formatter that can parse dates of 
// the form MM-dd-yyyy. 
SimpleDateFormat bartDateFormat = 
new SimpleDateFormat("MM-dd-yyyy"); 


// Create a string containing a text date to be parsed. 
String dateStringToParse = "9-29-2001"; 


try { 
// Parse the text version of the date. 
// We have to perform the parse method in a 
// try-catch construct in case dateStringToParse 
// does not contain a date in the format we are expecting. 
Date date = bartDateFormat.parse(dateStringToParse); 


// Now send the parsed date as a long value 
// to the system output. 
System.out.println(date.getTime()); 

catch (Exception ex) { 
System.out.println(ex.getMessage()); 
} }}
//
//
//
//
// 五、使用標準的日期格式化過程 
//
// 既然我們已經可以生成和解析定製的日期格式了, 讓我們來看一看如何使用內建的格式化過程. 方法 DateFormat.getDateTimeInstance() 讓我們得以用幾種不同的方法獲得標準的日期格式化過程. 在下面的例子中, 我們獲取了四個內建的日期格式化過程. 它們包括一個短的, 中等的, 長的, 和完整的日期格式. 
//
//
// public static void mccin22() { 
// Date date = new Date(); 
//
// DateFormat shortDateFormat = 
// DateFormat.getDateTimeInstance( 
// DateFormat.SHORT, 
// DateFormat.SHORT); 
//
// DateFormat mediumDateFormat = 
// DateFormat.getDateTimeInstance( 
// DateFormat.MEDIUM, 
// DateFormat.MEDIUM); 
//
// DateFormat longDateFormat = 
// DateFormat.getDateTimeInstance( 
// DateFormat.LONG, 
// DateFormat.LONG); 
//
// DateFormat fullDateFormat = 
// DateFormat.getDateTimeInstance( 
// DateFormat.FULL, 
// DateFormat.FULL); 
//
// System.out.println(shortDateFormat.format(date)); 
// System.out.println(mediumDateFormat.format(date)); 
// System.out.println(longDateFormat.format(date)); 
// System.out.println(fullDateFormat.format(date)); 
//

//
//
//
// 注意我們在對 getDateTimeInstance的每次調用中都傳遞了兩個值. 第一個參數是日期風格, 而第二個參數是時間風格. 它們都是基本數據類型int(整型). 考慮到可讀性, 我們使用了DateFormat 類提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道獲取時間和日期格式化過程的更多的方法和選項, 請看Sun 公司Web 站點上的解釋. 
//
// 運行我們的例子程序的時候, 它將向標準輸出設備輸出下面的內容: 
// 9/29/01 8:44 PM 
// Sep 29, 2001 8:44:45 PM 
// September 29, 2001 8:44:45 PM EDT 
// Saturday, September 29, 2001 8:44:45 PM EDT 
//
//
// 六、Calendar 類 
//
// 我們現在已經能夠格式化並創建一個日期對象了, 但是我們如何才能設置和獲取日期數據的特定部分呢, 比如說小時, 日, 或者分鐘? 我們又如何在日期的這些部分加上或者減去值呢? 答案是使用Calendar 類. 就如我們前面提到的那樣, Calendar 類中的方法替代了Date 類中被人唾罵的方法. 
//
// 假設你想要設置, 獲取, 和操縱一個日期對象的各個部分, 比方一個月的一天或者是一個星期的一天. 爲了演示這個過程, 我們將使用具體的子類 java.util.GregorianCalendar. 考慮下面的例子, 它計算得到下面的第十個星期五是13號. 
//




// public  void main1(){ 
// DateFormat dateFormat = 
// DateFormat.getDateInstance(DateFormat.FULL); 
//
// // Create our Gregorian Calendar. 
// GregorianCalendar cal = new GregorianCalendar(); 
//
// // Set the date and time of our calendar 
// // to the system's date and time 
// cal.setTime(new Date()); 
//
// System.out.println("System Date: " + 
// dateFormat.format(cal.getTime())); 
//
// // Set the day of week to FRIDAY 
// cal.set(GregorianCalendar.DAY_OF_WEEK, 
// GregorianCalendar.FRIDAY); 
// System.out.println("After Setting Day of Week to Friday: " + 
// dateFormat.format(cal.getTime())); 
//
// int friday13Counter = 0; 
// while (friday13Counter <= 10) { 
//
// // Go to the next Friday by adding 7 days. 
// cal.add(GregorianCalendar.DAY_OF_MONTH, 7); 
//
// // If the day of month is 13 we have 
// // another Friday the 13th. 
// if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13) { 
// friday13Counter++; 
// System.out.println(dateFormat.format(cal.getTime())); 
//
//
//
// }
//
//
//
// 在這個例子中我們作了有趣的函數調用: 
// cal.set(GregorianCalendar.DAY_OF_WEEK, 
// GregorianCalendar.FRIDAY); 
//
// 和: 
// cal.add(GregorianCalendar.DAY_OF_MONTH, 7); 
//
// set 方法能夠讓我們通過簡單的設置星期中的哪一天這個域來將我們的時間調整爲星期五. 注意到這裏我們使用了常量 DAY_OF_WEEK 和 FRIDAY來增強代碼的可讀性. add 方法讓我們能夠在日期上加上數值. 潤年的所有複雜的計算都由這個方法自動處理. 
//
// 我們這個例子的輸出結果是: 
// System Date: Saturday, September 29, 2001 
// 當我們將它設置成星期五以後就成了: Friday, September 28, 2001 
// Friday, September 13, 2002 
// Friday, December 13, 2002 
// Friday, June 13, 2003 
// Friday, February 13, 2004 
// Friday, August 13, 2004 
// Friday, May 13, 2005 
// Friday, January 13, 2006 
// Friday, October 13, 2006 
// Friday, April 13, 2007 
// Friday, July 13, 2007 
// Friday, June 13, 2008
//

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章