1.計算某一月份的最大天數
Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year);
time.set(Calendar.MONTH,i-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, 8);
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, 8);
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, 8);
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;
????}
注:getDaysBetween方法參考自:http://java.ccidnet.com/art/3741/20050611/535727_1.html?
Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year);
time.set(Calendar.MONTH,i-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, 8);
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, 8);
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, 8);
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對象








































注:以上方法是完全按時間計算,有時并不能令人滿意,如:
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)改進精確計算相隔天數的方法

















更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
