1、Date類(該類現在很少用了)
lDate類對象的創建:
n創建一個當前時間
//默認是創建一個代表系統當前日期的Date對象
Date d = new Date();
n創建一個我們指定的時間的Date對象:
下面是使用帶參數的構造方法,可以構造指定日期的Date類對象,Date類中年份的參數應該是實際需要代表的年份減去1900,實際需要代表的月份減去1以後的值。
//創建一個代表2009年6月12號的Date對象
Date d1 = new Date(2009-1900, 6-1, 12);(注意參數的設置啊!)
l正確獲得一個date對象所包含的信息
如:
Date d2 = new Date(2009-1900, 6-1, 12);
//獲得年份(注意年份要加上1900,這樣纔是日期對象d2所代表的年份)
int year = d2.getYear() + 1900;
//獲得月份(注意月份要加1,這樣纔是日期對象d2所代表的月份)
int month = d2.getMonth() + 1;
//獲得日期
int date = d2.getDate();
//獲得小時
int hour = d2.getHours();
//獲得分鐘
int minute = d2.getMinutes();
//獲得秒
int second = d2.getSeconds();
//獲得星期(注意:0代表星期日、1代表星期1、2代表星期2,其他的一次類推了)
int day = d2.getDay();
運行結果:
年份:2009
月份:6
日期:12
小時:0 //不設置默認是0
分鐘:0 //不設置默認是0
秒:0 //不設置默認是0
星期:5 //09-6-12今天就是星期5,又是一個星期天哦
2、Calendar類
Calendar類的功能要比Date類強大很多,而且在實現方式上也比Date類要複雜一些
lCalendar類對象的創建
Calendar類是一個抽象類,在實際使用時實現特定的子類的對象。由於Calendar類是抽象類,且Calendar類的構造方法是protected的,所以無法使用Calendar類的構造方法來創建對象,API中提供了getInstance方法用來創建對象。
n創建一個代表系統當前日期的Calendar對象
Calendar c = Calendar.getInstance();//默認是當前日期
n創建一個指定日期的Calendar對象
使用Calendar類代表特定的時間,需要首先創建一個Calendar的對象,然後再設定該對象中的年月日參數來完成。
//創建一個代表2009年6月12日的Calendar對象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
lCalendar類對象字段類型
Calendar類中用一下這些常量表示不同的意義,jdk內的很多類其實都是採用的這種思想
Calendar.YEAR——年份
Calendar.MONTH——月份
Calendar.DATE——日期
Calendar.DAY_OF_MONTH——日期,和上面的字段意義完全相同
Calendar.HOUR——12小時制的小時
Calendar.HOUR_OF_DAY——24小時制的小時
Calendar.MINUTE——分鐘
Calendar.SECOND——秒
Calendar.DAY_OF_WEEK——星期幾
lCalendar類對象信息的設置與獲得
nCalendar類對象信息的設置
uSet設置
如:Calendar c1 = Calendar.getInstance();
調用:public final void set(int year,int month,int date)
c1.set(2009, 6 - 1, 12);//把Calendar對象c1的年月日分別設這爲:2009、6、12
利用字段類型設置
如果只設定某個字段,例如日期的值,則可以使用如下set方法:
調用:public void set(int field,int value)
//把c1對象代表的日期設置爲10號,其它所有的數值會被重新計算
c1.set(Calendar.DATE,10);
//把c1對象代表的年份設置爲2008年,其他的所有數值會被重新計算
c1.set(Calendar.YEAR,2008);
其他字段屬性set的意義以此類推
uAdd設置
Calendar c1 = Calendar.getInstance();
//把c1對象的日期加上10,也就是c1所表的日期的10天后的日期,其它所有的數值會被重新計算
c1.add(Calendar.DATE, 10);
//把c1對象的日期加上10,也就是c1所表的日期的10天前的日期,其它所有的數值會被重新計算
c1.add(Calendar.DATE, -10);
其他字段屬性的add的意義以此類推
nCalendar類對象信息的獲得
Calendar c1 = Calendar.getInstance();
// 獲得年份
int year = c1.get(Calendar.YEAR);
// 獲得月份
int month = c1.get(Calendar.MONTH) + 1;
// 獲得日期
int date = c1.get(Calendar.DATE);
// 獲得小時
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 獲得分鐘
int minute = c1.get(Calendar.MINUTE);
// 獲得秒
int second = c1.get(Calendar.SECOND);
// 獲得星期幾(注意(這個與Date類是不同的):1代表星期日、2代表星期1、3代表星期二,以此類推)
int day = c1.get(Calendar.DAY_OF_WEEK);
3、GregorianCalendar類
GregorianCalendar
是Calendar
的一個具體子類,提供了世界上大多數國家使用的標準日曆系統。
GregorianCalendar類對象的創建
GregorianCalendar有自己的構造方法,而其父類Calendar沒有公開的構造方法哦。
GregorianCalendar() |
GregorianCalendar(int year, int month, int dayOfMonth) |
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) |
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) |
創建一個代表當前日期的GregorianCalendar對象
GregorianCalendar gc = new GregorianCalendar();
//創建一個代表2009年6月12日的GregorianCalendar對象(注意參數設置哦,與其父類是一樣的哦,月份要減去1)
GregorianCalendar gc = new GregorianCalendar(2009,6-1,12);
字段屬性什麼的都是隨其父Calendar了,呵
另外:GregorianCalendar有下面一個方法:
isLeapYear
(int year)
確定給定的年份是否爲閏年
4、DateFormat類
DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並分析日期或時間。日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期 -> 文本)、分析(文本-> 日期)和標準化。將日期表示爲 Date
對象,或者表示爲從 GMT(格林尼治標準時間)1970 年,1 月1 日 00:00:00 這一刻開始的毫秒數。
5、SimpleDateFormat類
public class SimpleDateFormat extends DateFormat
SimpleDateFormat
是一個以與語言環境相關的方式來格式化和分析日期的具體類。它允許進行格式化(日期 -> 文本)、分析(文本 -> 日期)和規範化。
所以本類可以實現:String 到 Date Date到String的互轉,如下:
SimpleDateFormat對象最常用的就是一下兩招了:
//注意構造函數中是SimpleDateFormat類解析日期的模式,大小寫代表的意義完全不一樣哦
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//日期到字符串的轉換
String today = df.format(new Date());
//字符串到日期的轉換
Date date = df.parse("2009-06-12 02:06:37");
System.out.println(df.format(new Date()));
6、日期類對象之間的互轉
lDate類對象與long型時間的互轉
//將Date類的對象轉換爲long型時間
Date d= new Date();
//使用對象的getTime()方法完成
longdLong = d.getTime();
//將long型時間轉換爲Date類的對象
long time = 1290876532190L;
//使用Date的構造方法完成
Date d2 = new Date(time);
lCalendar對象和long型時間之間的互轉
// 將Calendar對象轉換爲相對時間
Calendar c = Calendar.getInstance();
long t1 = c.getTimeInMillis();
// 將相對時間轉換爲Calendar對象
Calendar c1 = Calendar.getInstance();
longt = 1252785271098L;
c1.setTimeInMillis(t1);
lCalendar對象和Date對象之間的互轉
// 將Calendar對象轉換爲相對時間
Calendar c = Calendar.getInstance();
Date d = c.getTime();
// 將相對時間轉換爲Calendar對象
Calendar c1 = Calendar.getInstance();
Date d1 = new Date();
//通過setTime()方法後,日曆c1所表示的日期就d1的日期
c1.setTime(d1);
7、Ok,利用以上各個類的功能,我們可以很簡單的實現一些時間計算的功能哦,呵呵,下面看幾個方法:
l判斷是否是閏年
/**
*給定一個年份判斷該年份是否爲閏年createdate:2009-6-10author:Administrator
*
*@paramyear
*@return
*/
publicstaticboolean isLeapYear(int year) {
GregorianCalendar calendar = new GregorianCalendar();
return calendar.isLeapYear(year);
}
l獲取當前日期的字符串表示形式
/**
*利用SimpleDateFormat獲取當前日期的字符串表示形式格式:2009-55-05
*
*createdate:2009-6-5author:Administrator
*
*@return
*/
publicstatic String getCurrentDate() {
// 注意 SimpleDateFormat("yyyy-MM-dd")的參數間隔符號可以隨意設置的,如:
// yyyy年MM月dd日返回格式:2009年06月09日
// yyyy-MM-dd 返回格式: 2009-06-09
// SimpleDateFormat dateFormat = new SimpleDateFormat(
// "yyyy-MM-dd HH:mm:ss");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.format(System.currentTimeMillis());
}
l給出任意一個年月日得到該天是星期幾
/**
*給出任意一個年月日得到該天是星期幾createdate:2009-6-10author:Administrator
*
*@paramdate
*參數格式2009-6-10
*返回值:0代表星期日,1代表星期1,2代表星期2,以此類推
*/
publicstaticint getWeek(String date) {
// 注意參數的大小寫格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Calendar c = Calendar.getInstance();
try {
Date d = dateFormat.parse(date);
c.setTime(d);
} catch (ParseException e) {
}
return c.get(Calendar.DAY_OF_WEEK)-1;
}
l獲得今天n天以後或者n天以前是那一天
/**
*獲得距離今天n天的那一天的日期createdate:2009-6-11author:Administrator
*
*@paramday
*@return
*/
publicstatic String getDistanceDay(int day) {
Calendar calen = Calendar.getInstance();
calen.add(Calendar.DAY_OF_MONTH, day);
Date date = calen.getTime();
// 這裏也個用SimpleDateFormat的format()進行格式化,然後以字符串形式返回格式化後的date
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.format(date);
}
l獲得距離指定日期n天的那一天的日期
/**
*獲得距離指定日期n天的那一天的日期createdate:2009-6-11author:Administrator
*
*@paramdate
*格式:2009-6-11
*@paramday
*@return
*/
publicstatic String getDistanceDay(String date, int day) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Date d;
Calendar c =Calendar.getInstance();
try {
d = dateFormat.parse(date);
c.setTime(d);
c.add(Calendar.DATE, day);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return dateFormat.format(c.getTime());
}
/**
*獲得給定兩個日期相差度天數
*createdate:2009-6-23author:Administrator
*
*@paramdate1
*參數格式:2009-06-21
*@paramdate2
*/
publicstaticlong getGapDays(String date1, String date2) {
String[] d1 = date1.split("-");
String[] d2 = date2.split("-");
Calendar c = Calendar.getInstance();
c.set(Integer.parseInt(d1[0]), Integer.parseInt(d1[1]), Integer
.parseInt(d1[2]), 0, 0, 0);
long l1 = c.getTimeInMillis();
c.set(Integer.parseInt(d2[0]), Integer.parseInt(d2[1]), Integer
.parseInt(d2[2]), 0, 0, 0);
long l2 = c.getTimeInMillis();
return (Math.abs(l1 - l2) / (24 * 60 * 60 * 1000));
}