簡易代碼之家

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            157 Posts :: 2 Stories :: 57 Comments :: 0 Trackbacks
              下面的DateUtil類為筆者在以前項目中用到的對日期處理的公用方法,請看到這個類的有興趣的讀者測試,如有BUG請留言,筆者也會在以后的項目中積累完善并更新到此類中去。

            1import java.text.SimpleDateFormat;
            2import java.util.Calendar;
            3import java.util.Date;
            4import java.util.GregorianCalendar;
            5
            6/**
            7 * 
            8 * @author zzk
            9 *
           10 */

           11public class DateUtil {
           12
           13    /**
           14     * 取得某天相加(減)後的那一天
           15     * 
           16     * @param date
           17     * @param num(可正可負)
           18     * @return
           19     */

           20    public static Date getAnotherDate(Date date, int num) {
           21        Calendar c = Calendar.getInstance();
           22        c.setTime(date);
           23        c.add(Calendar.DAY_OF_YEAR, num);
           24        return c.getTime();
           25    }

           26
           27    /**
           28     * 取得某月的的最后一天
           29     * 
           30     * @param year
           31     * @param month
           32     * @return
           33     */

           34    public static Date getLastDayOfMonth(int year, int month) {
           35        Calendar cal = Calendar.getInstance();
           36        cal.set(Calendar.YEAR, year);// 年
           37        cal.set(Calendar.MONTH, month - 1);// 月,因為Calendar里的月是從0開始,所以要減1
           38        cal.set(Calendar.DATE, 1);// 日,設為一號
           39        cal.add(Calendar.MONTH, 1);// 月份加一,得到下個月的一號
           40        cal.add(Calendar.DATE, -1);// 下一個月減一為本月最后一天
           41        return cal.getTime();// 獲得月末是幾號
           42    }

           43
           44    /**
           45     * 取得某天是一年中的多少周
           46     * 
           47     * @param date
           48     * @return
           49     */

           50    public static int getWeekOfYear(Date date) {
           51        Calendar c = new GregorianCalendar();
           52        c.setFirstDayOfWeek(Calendar.MONDAY);
           53        c.setMinimalDaysInFirstWeek(7);
           54        c.setTime(date);
           55        return c.get(Calendar.WEEK_OF_YEAR);
           56    }

           57
           58    /**
           59     * 取得某天所在周的第一天
           60     * 
           61     * @param date
           62     * @return
           63     */

           64    public static Date getFirstDayOfWeek(Date date) {
           65        Calendar c = new GregorianCalendar();
           66        c.setFirstDayOfWeek(Calendar.MONDAY);
           67        c.setTime(date);
           68        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
           69        return c.getTime();
           70    }

           71
           72    /**
           73     * 取得某天所在周的最后一天
           74     * 
           75     * @param date
           76     * @return
           77     */

           78    public static Date getLastDayOfWeek(Date date) {
           79        Calendar c = new GregorianCalendar();
           80        c.setFirstDayOfWeek(Calendar.MONDAY);
           81        c.setTime(date);
           82        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
           83        return c.getTime();
           84    }

           85
           86    /**
           87     * 取得某一年共有多少周
           88     * 
           89     * @param year
           90     * @return
           91     */

           92    public static int getMaxWeekNumOfYear(int year) {
           93        Calendar c = new GregorianCalendar();
           94        c.set(year, Calendar.DECEMBER, 31235959);
           95        return getWeekOfYear(c.getTime());
           96    }

           97    
           98    /**
           99     * 取得某年某周的第一天
          100     * 對于交叉:2008-12-29到2009-01-04屬于2008年的最后一周,2009-01-05為2009年第一周的第一天
          101     * @param year
          102     * @param week
          103     * @return
          104     */

          105    public static Date getFirstDayOfWeek(int year, int week) {
          106        Calendar calFirst = Calendar.getInstance();
          107        calFirst.set(year, 07);
          108        Date firstDate = getFirstDayOfWeek(calFirst.getTime());
          109
          110        Calendar firstDateCal = Calendar.getInstance();
          111        firstDateCal.setTime(firstDate);
          112
          113        Calendar c = new GregorianCalendar();
          114        c.set(Calendar.YEAR, year);
          115        c.set(Calendar.MONTH, Calendar.JANUARY);
          116        c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));
          117
          118        Calendar cal = (GregorianCalendar) c.clone();
          119        cal.add(Calendar.DATE, (week - 1* 7);
          120        firstDate = getFirstDayOfWeek(cal.getTime());
          121
          122        return firstDate;
          123    }

          124
          125    /**
          126     * 取得某年某周的最后一天
          127     * 對于交叉:2008-12-29到2009-01-04屬于2008年的最后一周,2009-01-04為2008年最后一周的最后一天
          128     * @param year
          129     * @param week
          130     * @return
          131     */

          132    public static Date getLastDayOfWeek(int year, int week) {
          133        Calendar calLast = Calendar.getInstance();
          134        calLast.set(year, 07);
          135        Date firstDate = getLastDayOfWeek(calLast.getTime());
          136
          137        Calendar firstDateCal = Calendar.getInstance();
          138        firstDateCal.setTime(firstDate);
          139
          140        Calendar c = new GregorianCalendar();
          141        c.set(Calendar.YEAR, year);
          142        c.set(Calendar.MONTH, Calendar.JANUARY);
          143        c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));
          144
          145        Calendar cal = (GregorianCalendar) c.clone();
          146        cal.add(Calendar.DATE, (week - 1* 7);
          147        Date lastDate = getLastDayOfWeek(cal.getTime());
          148        
          149        return lastDate;
          150    }

          151}

          152
          posted on 2008-01-08 18:49 Jakin.zhou 閱讀(2916) 評論(6)  編輯  收藏

          Feedback

          # re: Java中對日期的常用處理 2008-01-08 22:01 xidudui
          太贊了  回復  更多評論
            

          # re: Java中對日期的常用處理[未登錄] 2008-01-08 23:23 Crying
          好貼 轉啦
            回復  更多評論
            

          # re: Java中對日期的常用處理 2008-01-09 09:23 隔葉黃鶯
          不錯,我這里只說 取某年某月最后一天的寫法,用下面的方式會好理解來,省得加加減減的
          public static Date getLastDayOfMonth(int year, int month) {
          Calendar cal = Calendar.getInstance();
          cal.set(Calendar.YEAR, year);// 年
          cal.set(Calendar.MONTH, month - 1);// 月,因為Calendar里的月是從0開始,所以要減1
          //設置該月實際的最后一天
          cal.set(Calendar.DATE,cal.getActualMaximum(Calendar.DATE));
          return cal.getTime();// 獲得月末是幾號
          }

          其他方法中看是否可以應用的上
          getActualMaximum(int field)
          getActualMinimum(int field)
          這兩個方法  回復  更多評論
            

          # re: Java中對日期的常用處理 2008-01-14 12:02 Jakin.zhou
          謝謝樓上朋友,這個方法確實不錯。  回復  更多評論
            

          # re: Java中對日期的常用處理[未登錄] 2008-11-21 08:49 dimple
          請問取出某月的三個月后是什么月份,
          某月的六個月后是幾月怎么取啊? 謝謝!  回復  更多評論
            

          # re: Java中對日期的常用處理[未登錄] 2008-11-25 16:04 dimple
          這個已經解決@dimple
            回復  更多評論
            


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


          網站導航:
           
          主站蜘蛛池模板: 大化| 屏东县| 古浪县| 斗六市| 佛冈县| 保德县| 明星| 白银市| 顺平县| 奎屯市| 湟源县| 合作市| 罗城| 峡江县| 广平县| 菏泽市| 健康| 衡阳县| 嘉定区| 益阳市| 靖江市| 潼南县| 长宁区| 金乡县| 板桥市| 靖州| 昌图县| 泰兴市| 抚远县| 安远县| 邹平县| 洪江市| 福鼎市| 白水县| 左贡县| 博罗县| 安溪县| 赤峰市| 合阳县| 宜都市| 灵寿县|