keep moving!

          We must not cease from exploration. And the end of all our exploring will be to arrive where we began and to know the place for the first time.
          隨筆 - 37, 文章 - 2, 評論 - 3, 引用 - 0
          數(shù)據(jù)加載中……

          Java Date 錦囊

          相關(guān)文章:
          java中關(guān)于時間日期操作的常用函數(shù)
          如何確定一個月的某一周是從幾月幾號到幾號

          更多相關(guān)推薦 1.計算某一月份的最大天數(shù)

          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);//本月份的天數(shù)
          注:在使用set方法之前,必須先clear一下,否則很多信息會繼承自系統(tǒng)當前時間

          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.格式化輸出日期時間 (這個用的比較多)

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

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

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

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

          字符串轉(zhuǎn)化成時間類型(字符串可以是任意類型,只要和SimpleDateFormat中的格式一致即可)
          通常我們?nèi)r間跨度的時候,會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);

          8. 通過時間求時間

          年月周求日期
          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);

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

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

          class Datetest{
          *method 將字符串類型的日期轉(zhuǎn)換為一個timestamp(時間戳記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()返回一個long型
          return dateTime;
          }

          *method 將字符串類型的日期轉(zhuǎn)換為一個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();
          注意:這個地方da.getTime()得到的是一個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();
          }
          }
          }

          posted on 2008-09-07 02:21 大石頭 閱讀(240) 評論(0)  編輯  收藏 所屬分類: 基礎(chǔ)

          主站蜘蛛池模板: 英山县| 井陉县| 林周县| 抚顺市| 运城市| 洛阳市| 镇坪县| 东乡族自治县| 扶余县| 伊川县| 南召县| 南丰县| 营山县| 桂阳县| 石棉县| 高青县| 望都县| 昆山市| SHOW| 五家渠市| 田林县| 荥阳市| 杭锦后旗| 巧家县| 德兴市| 勐海县| 将乐县| 彭山县| 嘉荫县| 太康县| 乌鲁木齐市| 石城县| 台北县| 昔阳县| 安阳县| 蒙城县| 临颍县| 兴仁县| 昌都县| 从江县| 岑溪市|