小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

java中關(guān)于時(shí)間日期操作的常用函數(shù)

 昵稱2807 2007-09-26

java中關(guān)于時(shí)間日期操作的常用函數(shù)

1.計(jì)算某一月份的最大天數(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));
    }
(2)傳進(jìn)Date對(duì)象
/**計(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));
    }
同理,可以用相同的方法計(jì)算出任意兩個(gè)時(shí)間相隔的小時(shí)數(shù),分鐘數(shù),秒鐘數(shù)等
注:以上方法是完全按時(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;
    }
注:getDaysBetween方法參考自:http://java./art/3741/20050611/535727_1.html

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1331771

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多