java中關(guān)于時(shí)間日期操作的常用函數(shù)Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); time.set(Calendar.MONTH,i-1);//注意,Calendar對(duì)象默認(rèn)一月為0 int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數(shù) 注:在使用set方法之前,必須先clear一下,否則很多信息會(huì)繼承自系統(tǒng)當(dāng)前時(shí)間 2.Calendar和Date的轉(zhuǎn)化 (1) Calendar轉(zhuǎn)化為Date Calendar cal=Calendar.getInstance(); Date date=cal.getTime(); (2) Date轉(zhuǎn)化為Calendar Date date=new Date(); Calendar cal=Calendar.getInstance(); cal.setTime(date); 3.格式化輸出日期時(shí)間 Date date=new Date(); SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); System.out.println(df.format(date)); 4.計(jì)算一年中的第幾星期 (1)計(jì)算某一天是一年中的第幾星期 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)計(jì)算一年中的第幾星期是幾號(hào) 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 可見(jiàn),roll()方法在本月內(nèi)循環(huán),一般使用add()方法; 6.計(jì)算兩個(gè)任意時(shí)間中間的間隔天數(shù) (1)傳進(jìn)Calendar對(duì)象 ![]() /** *//**計(jì)算兩個(gè)時(shí)間之間相隔天數(shù) * @param startday 開(kāi)始時(shí)間 * @param endday 結(jié)束時(shí)間 * @return */![]() public int getIntervalDays(Calendar startday,Calendar endday)...{ //確保startday在endday之前![]() if(startday.after(endday))...{ Calendar cal=startday; startday=endday; endday=cal; } //分別得到兩個(gè)時(shí)間的毫秒數(shù) long sl=startday.getTimeInMillis(); long el=endday.getTimeInMillis(); long ei=el-sl; //根據(jù)毫秒數(shù)計(jì)算間隔天數(shù) return (int)(ei/(1000*60*60*24)); }![]() /** *//**計(jì)算兩個(gè)時(shí)間之間相隔天數(shù) * @param startday 開(kāi)始時(shí)間 * @param endday 結(jié)束時(shí)間 * @return */![]() public int getIntervalDays(Date startday,Date endday)...{ //確保startday在endday之前![]() if(startday.after(endday))...{ Date cal=startday; startday=endday; endday=cal; } //分別得到兩個(gè)時(shí)間的毫秒數(shù) long sl=startday.getTime(); long el=endday.getTime(); long ei=el-sl; //根據(jù)毫秒數(shù)計(jì)算間隔天數(shù) return (int)(ei/(1000*60*60*24)); }注:以上方法是完全按時(shí)間計(jì)算,有時(shí)并不能令人滿意,如: startday="2006-10-11 20:00:00" endday="2006-10-12 8:00:00" 計(jì)算結(jié)果為0,但是我們也許相讓計(jì)算結(jié)果變?yōu)?,此時(shí)可以用如下方法實(shí)現(xiàn): 在傳參之前,先設(shè)定endday的時(shí)間,如: endday.set(Calendar.HOUR_OF_DAY, 23); endday.set(Calendar.MINUTE, 59); endday.set(Calendar.SECOND, 59); endday.set(Calendar.MILLISECOND, 59); 這樣再傳進(jìn)去startday,endday,則結(jié)果就如我們所愿了。不過(guò),如果嫌以上方法麻煩,可以參考以下方法: (3)改進(jìn)精確計(jì)算相隔天數(shù)的方法 ![]() 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);//得到當(dāng)年的實(shí)際天數(shù) d1.add(Calendar.YEAR, 1); } while (d1.get(Calendar.YEAR) != y2); } return days; }Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1331771 |
|
|
來(lái)自: 昵稱2807 > 《Java or Jsp》