<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java學(xué)習(xí)

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對(duì)文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會(huì)盡力幫助解決。一起進(jìn)步

     

    Date類學(xué)習(xí)總結(jié)(Calendar Date 字符串 相互轉(zhuǎn)換 格式化)

    Date類學(xué)習(xí)總結(jié) 

    1.計(jì)算某一月份的最大天數(shù)

    Calendar time=Calendar.getInstance();
    time.clear();
    time.set(Calendar.YEAR,year); //year 為 int
    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.把字符串轉(zhuǎn)化為java.util.Date
    方法一:
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    java.util.Date dt=sdf.parse("2005-2-19");
    System.out.print(sdf.format(dt));    //輸出結(jié)果是:2005-2-19

    方法二:
    java.util.Date dt=null;
    DateFormat df=DateFormat.getDateInstance();
    dt=df.parse("2005-12-19");
    System.out.println(dt);              //輸出結(jié)果為:Mon Dec 19 00:00:00 CST 2005
    System.out.println(df.format(dt)); //輸出結(jié)果為:2005-2-19

    4.把字符串轉(zhuǎn)化為java.sql.Date
    字符串必須是"yyyy-mm-dd"格式,否則會(huì)拋出IllegalArgumentException異常
    java.sql.Date sdt=java.sql.Date.valueOf("2005-9-6");
    System.out.println(sdt);          //輸出結(jié)果為:2005-9-6


    5.格式化輸出日期時(shí)間 (這個(gè)用的比較多)

    Date date=new Date();
    SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    String time=df.format(date);
    System.out.println(time);

    需要注意的一點(diǎn):SimpleDateFormat類格式化一個(gè)字符串時(shí),可根據(jù)需要調(diào)用 format() 或 parse() 函數(shù);只不過format()返回String類型,parse()返回java.util.Date類型

    6.計(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

    7.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()方法在本月內(nèi)循環(huán),一般使用add()方法;

    8.計(jì)算兩個(gè)任意時(shí)間中間的間隔天數(shù)(這個(gè)比較常用)
    (1)傳進(jìn)Calendar對(duì)象
        public int getIntervalDays(Calendar startday,Calendar 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)傳進(jìn)Date對(duì)象

        public int getIntervalDays(Date startday,Date 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));
        }
    (3)改進(jìn)精確計(jì)算相隔天數(shù)的方法
        public int getDaysBetween (Calendar d1, Calendar d2){
            if (d1.after(d2)){
                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_F_YEAR);//得到當(dāng)年的實(shí)際天數(shù)
                    d1.add(Calendar.YEAR, 1);
                } while (d1.get(Calendar.YEAR) != y2);
            }
            return days;
        }
    注意:通過上面的方法可以衍生出求任何時(shí)間,如要查出郵箱三周之內(nèi)收到的郵件(得到當(dāng)前系統(tǒng)時(shí)間-再得到三周前時(shí)間)用收件的時(shí)間去匹配 最好裝化成 long去比較
    如:1年前日期(注意毫秒的轉(zhuǎn)換)
       java.util.Date myDate=new java.util.Date();
       long myTime=(myDate.getTime()/1000)-60*60*24*365;
       myDate.setTime(myTime*1000);
       String mDate=formatter.format(myDate);
       3周前的日期
       Calendar cal3 = Calendar.getInstance();
    cal3.add(cal3.DATE, -21);//取3周前的日期
    String date = formatter.format(cal3.getTime());

    9. String 和 Date ,Long 之間相互轉(zhuǎn)換 (最常用)

    字符串轉(zhuǎn)化成時(shí)間類型(字符串可以是任意類型,只要和SimpleDateFormat中的格式一致即可)
    通常我們?nèi)r(shí)間跨度的時(shí)候,會(huì)substring出具體時(shí)間--long-比較

    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);
    java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");
    long dvalue=d.getTime();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String mDateTime1=formatter.format(d);

    10. 通過時(shí)間求時(shí)間

    年月周求日期
    SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
    java.util.Date date2= formatter2.parse("2003-05 5 星期五");
    SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
    String mydate2=formatter3.format(date2);

    求是星期幾
    mydate= myFormatter.parse("2001-1-1");
    SimpleDateFormat formatter4 = new SimpleDateFormat("E");
    String mydate3=formatter4.format(mydate);

    11. java 和 具體的數(shù)據(jù)庫結(jié)合

    在開發(fā)web應(yīng)用中,針對(duì)不同的數(shù)據(jù)庫日期類型,我們需要在我們的程序中對(duì)日期類型做各種不同的轉(zhuǎn)換。若對(duì)應(yīng)數(shù)據(jù)庫數(shù)據(jù)是oracle的Date類 型,即只需要年月日的,可以選擇使用java.sql.Date類型,若對(duì)應(yīng)的是MSsqlserver 數(shù)據(jù)庫的DateTime類型,即需要年月日時(shí)分秒的,選擇java.sql.Timestamp類型
    你可以使用dateFormat定義時(shí)間日期的格式,轉(zhuǎn)一個(gè)字符串即可

    class Datetest{
    *method 將字符串類型的日期轉(zhuǎn)換為一個(gè)timestamp(時(shí)間戳記java.sql.Timestamp)
    *@param dateString 需要轉(zhuǎn)換為timestamp的字符串
    *@return dataTime timestamp

    public final static java.sql.Timestamp string2Time(String dateString)
    throws java.text.ParseException {
    DateFormat dateFormat;
    dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//設(shè)定格式
    //dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);
    dateFormat.setLenient(false);
    java.util.Date timeDate = dateFormat.parse(dateString);//util類型
    java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp類型,timeDate.getTime()返回一個(gè)long型
    return dateTime;
    }

    *method 將字符串類型的日期轉(zhuǎn)換為一個(gè)Date(java.sql.Date)
    *@param dateString 需要轉(zhuǎn)換為Date的字符串
    *@return dataTime Date

    public final static java.sql.Date string2Date(String dateString)
    throws java.lang.Exception {
    DateFormat dateFormat;
    dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
    dateFormat.setLenient(false);
    java.util.Date timeDate = dateFormat.parse(dateString);//util類型
    java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql類型
    return dateTime;
    }

    public static void main(String[] args){
    Date da = new Date();
    注意:這個(gè)地方da.getTime()得到的是一個(gè)long型的值
    System.out.println(da.getTime());

    由日期date轉(zhuǎn)換為timestamp

    第一種方法:使用new Timestamp(long)
    Timestamp t = new Timestamp(new Date().getTime());
    System.out.println(t);

    第二種方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)
    Timestamp tt = new Timestamp(Calendar.getInstance().get(
          Calendar.YEAR) - 1900, Calendar.getInstance().get(
          Calendar.MONTH), Calendar.getInstance().get(
          Calendar.DATE), Calendar.getInstance().get(
          Calendar.HOUR), Calendar.getInstance().get(
          Calendar.MINUTE), Calendar.getInstance().get(
          Calendar.SECOND), 0);
    System.out.println(tt);

    try {
    String sToDate = "2005-8-18";//用于轉(zhuǎn)換成java.sql.Date的字符串
          String sToTimestamp = "2005-8-18 14:21:12.123";//用于轉(zhuǎn)換成java.sql.Timestamp的字符串
          Date date1 = string2Date(sToDate);
          Timestamp date2 = string2Time(sToTimestamp);
    System.out.println("Date:"+date1.toString());//結(jié)果顯示
    System.out.println("Timestamp:"+date2.toString());//結(jié)果顯示
    }catch(Exception e) {
    e.printStackTrace();
    }
    }
    }


    一、Date的構(gòu)造函數(shù)

    1.1構(gòu)造一個(gè)反映當(dāng)時(shí)時(shí)間的Date實(shí)例
    Date
    public Date()
    構(gòu)造一個(gè)Date對(duì)象并對(duì)其進(jìn)行初始化以反映當(dāng)前時(shí)間。

    1.2從一個(gè)長(zhǎng)整型數(shù)據(jù)構(gòu)造一個(gè)Date實(shí)例
    Date
    public Date(long date)
    構(gòu)造一個(gè)Date對(duì)象,并根據(jù)相對(duì)于GMT 1970年1月1日00:00:00的毫秒數(shù)對(duì)其進(jìn)行初始化。
    參數(shù):
    date - 相對(duì)于GMT 1970年1月1日00:00:00的毫秒數(shù)。

    1.3從年月日時(shí)分秒構(gòu)造一個(gè)Date實(shí)例
    Date
    public Date(int year,
    int month,
    int date)
    public Date(int year,
    int month,
    int date,
    int hrs,
    int min)
    public Date(int year,
    int month,
    int date,
    int hrs,
    int min,
    int sec)
    這三個(gè)構(gòu)造函數(shù)均不推薦使用,在JDK 1.1版中,分別被Calendar.set(year + 1900, month, date)或GregorianCalendar(year + 1900, month, date)、Calendar.set(year + 1900, month, date, hrs, min)或 GregorianCalendar(year + 1900, month, date, hrs, min)、Calendar.set(year + 1900, month, date, hrs, min, sec)或GregorianCalendar(year + 1900, month, date, hrs, min, sec)代替。

    posted on 2008-10-08 21:27 找個(gè)美女做老婆 閱讀(43846) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲AV一二三区成人影片| 亚洲妇熟XXXX妇色黄| 亚洲一区二区三区四区视频 | 亚洲午夜国产精品| 国产成人yy免费视频| 亚洲精品国产啊女成拍色拍| 全部免费毛片在线播放| 久久久亚洲AV波多野结衣| 91频在线观看免费大全| 国内精品久久久久影院亚洲| 在线jyzzjyzz免费视频| 黄页网站在线视频免费| 亚洲另类少妇17p| 18禁超污无遮挡无码免费网站| 亚洲国产美国国产综合一区二区| 欧洲精品99毛片免费高清观看| 亚洲一本之道高清乱码| 18禁成年无码免费网站无遮挡| 亚洲欧洲无卡二区视頻| yy6080久久亚洲精品| 国产成人AV免费观看| 久久综合亚洲色HEZYO社区| 德国女人一级毛片免费| 日日狠狠久久偷偷色综合免费| 国产aⅴ无码专区亚洲av麻豆| 久久国产精品免费视频| 亚洲国产成人九九综合| 国产在线观看免费不卡| 国产婷婷成人久久Av免费高清 | 亚洲精品偷拍无码不卡av| 97无码免费人妻超级碰碰碰碰| 特级毛片爽www免费版| 内射少妇36P亚洲区| 日韩免费视频观看| 国产一级淫片a免费播放口| 国产99在线|亚洲| 亚洲爽爽一区二区三区| 57PAO成人国产永久免费视频 | 国产亚洲精品美女2020久久| 国产成人精品日本亚洲| 在线观看免费宅男视频|