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

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

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

    Java學習

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

     

    Date類學習總結(Calendar Date 字符串 相互轉換 格式化)

    Date類學習總結 

    1.計算某一月份的最大天數

    Calendar time=Calendar.getInstance();
    time.clear();
    time.set(Calendar.YEAR,year); //year 為 int
    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.把字符串轉化為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));    //輸出結果是:2005-2-19

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

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


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

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

    需要注意的一點:SimpleDateFormat類格式化一個字符串時,可根據需要調用 format() 或 parse() 函數;只不過format()返回String類型,parse()返回java.util.Date類型

    6.計算一年中的第幾星期

    (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

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

    8.計算兩個任意時間中間的間隔天數(這個比較常用)
    (1)傳進Calendar對象
        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)傳進Date對象

        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)改進精確計算相隔天數的方法
        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);//得到當年的實際天數
                    d1.add(Calendar.YEAR, 1);
                } while (d1.get(Calendar.YEAR) != y2);
            }
            return days;
        }
    注意:通過上面的方法可以衍生出求任何時間,如要查出郵箱三周之內收到的郵件(得到當前系統時間-再得到三周前時間)用收件的時間去匹配 最好裝化成 long去比較
    如:1年前日期(注意毫秒的轉換)
       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 之間相互轉換 (最常用)

    字符串轉化成時間類型(字符串可以是任意類型,只要和SimpleDateFormat中的格式一致即可)
    通常我們取時間跨度的時候,會substring出具體時間--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. 通過時間求時間

    年月周求日期
    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 和 具體的數據庫結合

    在開發web應用中,針對不同的數據庫日期類型,我們需要在我們的程序中對日期類型做各種不同的轉換。若對應數據庫數據是oracle的Date類 型,即只需要年月日的,可以選擇使用java.sql.Date類型,若對應的是MSsqlserver 數據庫的DateTime類型,即需要年月日時分秒的,選擇java.sql.Timestamp類型
    你可以使用dateFormat定義時間日期的格式,轉一個字符串即可

    class Datetest{
    *method 將字符串類型的日期轉換為一個timestamp(時間戳記java.sql.Timestamp)
    *@param dateString 需要轉換為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);//設定格式
    //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()返回一個long型
    return dateTime;
    }

    *method 將字符串類型的日期轉換為一個Date(java.sql.Date)
    *@param dateString 需要轉換為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();
    注意:這個地方da.getTime()得到的是一個long型的值
    System.out.println(da.getTime());

    由日期date轉換為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";//用于轉換成java.sql.Date的字符串
          String sToTimestamp = "2005-8-18 14:21:12.123";//用于轉換成java.sql.Timestamp的字符串
          Date date1 = string2Date(sToDate);
          Timestamp date2 = string2Time(sToTimestamp);
    System.out.println("Date:"+date1.toString());//結果顯示
    System.out.println("Timestamp:"+date2.toString());//結果顯示
    }catch(Exception e) {
    e.printStackTrace();
    }
    }
    }


    一、Date的構造函數

    1.1構造一個反映當時時間的Date實例
    Date
    public Date()
    構造一個Date對象并對其進行初始化以反映當前時間。

    1.2從一個長整型數據構造一個Date實例
    Date
    public Date(long date)
    構造一個Date對象,并根據相對于GMT 1970年1月1日00:00:00的毫秒數對其進行初始化。
    參數:
    date - 相對于GMT 1970年1月1日00:00:00的毫秒數。

    1.3從年月日時分秒構造一個Date實例
    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)
    這三個構造函數均不推薦使用,在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 找個美女做老婆 閱讀(43836) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    公告

    本blog已經搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 四虎AV永久在线精品免费观看| 成人黄软件网18免费下载成人黄18免费视频| 国产精品四虎在线观看免费| 亚洲人配人种jizz| 成人免费视频69| 一本色道久久综合亚洲精品蜜桃冫| 男女做羞羞的事视频免费观看无遮挡 | 亚洲最大的黄色网| 国产桃色在线成免费视频| jlzzjlzz亚洲jzjzjz| 成人啪精品视频免费网站| 久久精品国产亚洲AV| 亚洲AV伊人久久青青草原| www在线观看免费视频| 亚洲国产精品一区第二页 | 免费人成动漫在线播放r18| 亚洲欧洲国产成人综合在线观看 | 亚洲高清不卡视频| 国产又大又粗又长免费视频 | 亚洲熟妇av午夜无码不卡| 日本免费人成视频播放| 一级特级aaaa毛片免费观看| 国产V亚洲V天堂无码| 亚洲香蕉免费有线视频| 老司机亚洲精品影院在线观看| 亚洲一级特黄大片无码毛片| 免费人成视频在线观看网站| 7777久久亚洲中文字幕| 亚洲成人高清在线| 日韩免费无码一区二区三区| 亚洲成av人片天堂网无码】| 亚洲伊人成无码综合网 | 57pao一国产成视频永久免费| 亚洲午夜理论片在线观看| 久久夜色精品国产亚洲av| 国产精品爱啪在线线免费观看| 美女一级毛片免费观看| 亚洲韩国—中文字幕| 免费一级毛片清高播放| 99久热只有精品视频免费观看17| 亚洲а∨精品天堂在线|