0000006_java学习之路_JAVA日期处理

最近用到计算月份的第一天跟最后一天了,然后发现了公司这个日期处理工具,挺不错的,分享给大家!里面可以处理年、季度、月、旬、周之类的开始结束天数,每个方法都有注释,挺好用的,有些方法带有参数偏移量,有些不带,刚看到的时候也挺郁闷,到底是什么东西,就自己测试了一下,这里就举一个例子吧!

    偏移量解释     比如今天时间是2015-11-06
    getFirstDayOfYear(-1)  就是2014-01-01      getFirstDayOfYear(1)就是2016-01-01
    getFirstDayOfMonth(-1) 就是2015-10-01      getFirstDayOfMonth(1)就是2015-12-01
    getFirstDayOfMonth(0)  就是2015-11-01 等同于getFirstDayOfMonth()
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;

    public class DateHelper {
        /**
         * 时间范围:年
         */
        public static final int YEAR = 1;

        /**
         * 时间范围:季度
         */
        public static final int QUARTER = 2;

        /**
         * 时间范围:月
         */
        public static final int MONTH = 3;

        /**
         * 时间范围:旬
         */
        public static final int TENDAYS = 4;

        /**
         * 时间范围:周
         */
        public static final int WEEK = 5;

        /**
         * 时间范围:日
         */
        public static final int DAY = 6;

        /* 基准时间 */
        private Date fiducialDate = null;
        private Calendar cal = null;


        private DateHelper(Date fiducialDate) {
            if (fiducialDate != null) {
                this.fiducialDate = fiducialDate;
            } else {
                this.fiducialDate = new Date(System.currentTimeMillis());
            }

            this.cal = Calendar.getInstance();
            this.cal.setTime(this.fiducialDate);
            this.cal.set(Calendar.HOUR_OF_DAY, 0);
            this.cal.set(Calendar.MINUTE, 0);
            this.cal.set(Calendar.SECOND, 0);
            this.cal.set(Calendar.MILLISECOND, 0);

            this.fiducialDate = this.cal.getTime();
        }


        /**
         * 获取DateHelper实例
         *
         * @param fiducialDate 基准时间
         * @return
         */
        public static DateHelper getInstance(Date fiducialDate) {
            return new DateHelper(fiducialDate);
        }

        /**
         * 获取DateHelper实例, 使用当前时间作为基准时间
         *
         * @return
         */
        public static DateHelper getInstance() {
            return new DateHelper(null);
        }


        /**
         * 获取年的第一天
         *
         * @param offset 偏移量
         * @return
         */
        public Date getFirstDayOfYear(int offset) {
            cal.setTime(this.fiducialDate);
            cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset);
            cal.set(Calendar.MONTH, Calendar.JANUARY);
            cal.set(Calendar.DAY_OF_MONTH, 1);
            return cal.getTime();
        }

        /**
         * 获取年的最后一天
         *
         * @param offset 偏移量
         * @return
         */
        public Date getLastDayOfYear(int offset) {
            cal.setTime(this.fiducialDate);
            cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset);
            cal.set(Calendar.MONTH, Calendar.DECEMBER);
            cal.set(Calendar.DAY_OF_MONTH, 31);
            return cal.getTime();
        }

        /**
         * 获取季度的第一天
         *
         * @param offset 偏移量
         * @return
         */
        public Date getFirstDayOfQuarter(int offset) {
            cal.setTime(this.fiducialDate);
            cal.add(Calendar.MONTH, offset * 3);
            int mon = cal.get(Calendar.MONTH);
            if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH) {
                cal.set(Calendar.MONTH, Calendar.JANUARY);
                cal.set(Calendar.DAY_OF_MONTH, 1);
            }
            if (mon >= Calendar.APRIL && mon <= Calendar.JUNE) {
                cal.set(Calendar.MONTH, Calendar.APRIL);
                cal.set(Calendar.DAY_OF_MONTH, 1);
            }
            if (mon >= Calendar.JULY && mon <= Calendar.SEPTEMBER) {
                cal.set(Calendar.MONTH, Calendar.JULY);
                cal.set(Calendar.DAY_OF_MONTH, 1);
            }
            if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER) {
                cal.set(Calendar.MONTH, Calendar.OCTOBER);
                cal.set(Calendar.DAY_OF_MONTH, 1);
            }
            return cal.getTime();
        }

        /**
         * 获取季度的最后一天
         *
         * @param offset 偏移量
         * @return
         */
        public Date getLastDayOfQuarter(int offset) {
            cal.setTime(this.fiducialDate);
            cal.add(Calendar.MONTH, offset * 3);

            int mon = cal.get(Calendar.MONTH);
            if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH) {
                cal.set(Calendar.MONTH, Calendar.MARCH);
                cal.set(Calendar.DAY_OF_MONTH, 31);
            }
            if (mon >= Calendar.APRIL && mon <= Calendar.JUNE) {
                cal.set(Calendar.MONTH, Calendar.JUNE);
                cal.set(Calendar.DAY_OF_MONTH, 30);
            }
            if (mon >= Calendar.JULY && mon <= Calendar.SEPTEMBER) {
                cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
                cal.set(Calendar.DAY_OF_MONTH, 30);
            }
            if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER) {
                cal.set(Calendar.MONTH, Calendar.DECEMBER);
                cal.set(Calendar.DAY_OF_MONTH, 31);
            }
            return cal.getTime();
        }

        /**
         * 获取月的第一天
         *
         * @param offset 偏移量
         * @return
         */
        public Date getFirstDayOfMonth(int offset) {
            cal.setTime(this.fiducialDate);
            cal.add(Calendar.MONTH, offset);
            cal.set(Calendar.DAY_OF_MONTH, 1);
            return cal.getTime();
        }

        /**
         * 获取月的最后一天
         *
         * @param offset 偏移量
         * @return
         */
        public Date getLastDayOfMonth(int offset) {
            cal.setTime(this.fiducialDate);
            cal.add(Calendar.MONTH, offset + 1);
            cal.set(Calendar.DAY_OF_MONTH, 1);
            cal.add(Calendar.DAY_OF_MONTH, -1);
            return cal.getTime();
        }

        /**
         * 获取月的第一天
         *
         * @param someDate
         * @return
         */
        public Date getFirstDayOfMonth(Date someDate) {
            Calendar ca = Calendar.getInstance();
            ca.setTime(someDate);   //   someDate   为你要获取的那个月的时间
            ca.set(Calendar.DAY_OF_MONTH, 1);
            Date firstDate = ca.getTime();
            return firstDate;
        }

        /**
         * 获取月的最后一天
         *
         * @param someDate
         * @return
         */
        public Date getLastDayOfMonth(Date someDate) {
            //System.out.println("AAAAAA");
            Calendar ca = Calendar.getInstance();
            ca.setTime(someDate);   //   someDate   为你要获取的那个月的时间
            ca.add(Calendar.MONTH, 1);
            ca.set(Calendar.DAY_OF_MONTH, 1);
            ca.add(Calendar.DAY_OF_MONTH, -1);
            Date lastDate = ca.getTime();
            return lastDate;
        }

        /**
         * 获取旬的第一天
         *
         * @param offset 偏移量
         * @return
         */
        public Date getFirstDayOfTendays(int offset) {
            cal.setTime(this.fiducialDate);
            int day = cal.get(Calendar.DAY_OF_MONTH);
            if (day >= 21) {
                day = 21;
            } else if (day >= 11) {
                day = 11;
            } else {
                day = 1;
            }

            if (offset > 0) {
                day = day + 10 * offset;
                int monOffset = day / 30;
                day = day % 30;
                cal.add(Calendar.MONTH, monOffset);
                cal.set(Calendar.DAY_OF_MONTH, day);
            } else {
                int monOffset = 10 * offset / 30;
                int dayOffset = 10 * offset % 30;
                if ((day + dayOffset) > 0) {
                    day = day + dayOffset;
                } else {
                    monOffset = monOffset - 1;
                    day = day - dayOffset - 10;
                }
                cal.add(Calendar.MONTH, monOffset);
                cal.set(Calendar.DAY_OF_MONTH, day);
            }
            return cal.getTime();
        }

        /**
         * 获取旬的最后一天
         *
         * @param offset 偏移量
         * @return
         */
        public Date getLastDayOfTendays(int offset) {
            Date date = getFirstDayOfTendays(offset + 1);
            cal.setTime(date);
            cal.add(Calendar.DAY_OF_MONTH, -1);
            return cal.getTime();
        }

        /**
         * 获取周的第一天(MONDAY)
         *
         * @param offset 偏移量
         * @return
         */
        public Date getFirstDayOfWeek(int offset) {
            cal.setTime(this.fiducialDate);
            cal.add(Calendar.DAY_OF_MONTH, offset * 7);
            cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
            return cal.getTime();
        }

        /**
         * 获取周的最后一天(SUNDAY)
         *
         * @param offset 偏移量
         * @return
         */
        public Date getLastDayOfWeek(int offset) {
            cal.setTime(this.fiducialDate);
            cal.add(Calendar.DAY_OF_MONTH, offset * 7);
            cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
            cal.add(Calendar.DAY_OF_MONTH, 6);
            return cal.getTime();
        }

        /**
         * 获取周的第一天(MONDAY)
         *
         * @param someDate
         * @return
         */
        public Date getFirstDayOfWeek(Date someDate) {
            Calendar ca = Calendar.getInstance();
            ca.setTime(someDate);   //   someDate   为你要获取的那个月的时间
            ca.set(Calendar.DAY_OF_WEEK, ca.getFirstDayOfWeek());
            return ca.getTime();
        }

        /**
         * 获取周的最后一天(SUNDAY)
         *
         * @param someDate
         * @return
         */
        public Date getLastDayOfWeek(Date someDate) {
            Calendar ca = Calendar.getInstance();
            ca.setTime(someDate);   //   someDate   为你要xl获取的那个月的时间
            ca.set(Calendar.DAY_OF_WEEK, ca.getFirstDayOfWeek() + 6);
            return ca.getTime();
        }

        /**
         * 根据日历的规则,为基准时间添加指定日历字段的时间量
         *
         * @param field  日历字段, 使用Calendar类定义的日历字段常量
         * @param offset 偏移量
         * @return
         */
        public Date add(int field, int offset) {
            cal.setTime(this.fiducialDate);
            cal.add(field, offset);
            return cal.getTime();
        }

        /**
         * 根据日历的规则,为基准时间添加指定日历字段的时间量
         *
         * @param field  日历字段, 使用Calendar类定义的日历字段常量
         * @param offset 偏移量
         * @return
         */
        public Date offset(int field, int offset) {
            cal.setTime(this.fiducialDate);
            cal.add(field, offset);
            return cal.getTime();
        }
        /**
         * 根据日历的规则,为基准时间添加指定日历字段的时间量
         *
         * @param field  日历字段, 使用Calendar类定义的日历字段常量
         * @param offset 偏移量
         * @param format 格式
         * @return
         */
        public String offset(int field, int offset,String format) {
            DateFormat df = new SimpleDateFormat(format);
            cal.setTime(this.fiducialDate);
            cal.add(field, offset);
            return df.format(cal.getTime());
        }
        /**
         * 根据日历的规则,为基准时间添加指定日历字段的单个时间单元
         *
         * @param field 日历字段, 使用Calendar类定义的日历字段常量
         * @param up    指定日历字段的值的滚动方向。true:向上滚动 / false:向下滚动
         * @return
         */
        public Date roll(int field, boolean up) {
            cal.setTime(this.fiducialDate);
            cal.roll(field, up);
            return cal.getTime();
        }


        /**
         * 得到系统当前年份
         *
         * @return
         */
        public String getNowYear() {
            Calendar CD = Calendar.getInstance();
            int YY = CD.get(Calendar.YEAR);
            return Integer.toString(YY);
        }
        public String getLastYear() {
            Calendar CD = Calendar.getInstance();
            int YY = CD.get(Calendar.YEAR)-1;
            return Integer.toString(YY);
        }
        /**
         * 得到系统当前月份
         *
         * @return
         */
        public String getNowMonth() {
            Calendar CD = Calendar.getInstance();
            int MM = CD.get(Calendar.MONTH) + 1;
            return Integer.toString(MM);
        }

        public String getLastMonth(int i) {
            Calendar CD = Calendar.getInstance();
            int MM = CD.get(Calendar.MONTH) - i;
            return Integer.toString(MM);
        }

        /**
         * 得到系统当前日
         *
         * @return
         */
        public String getNowtDay() {
            Calendar CD = Calendar.getInstance();
            int DD = CD.get(Calendar.DATE);
            return Integer.toString(DD);
        }

        /**
         * 得到当前年份
         *
         * @return
         */
        public int getNowYear(Date date) {
            Calendar CD = Calendar.getInstance();
            CD.setTime(date);
            int YY = CD.get(Calendar.YEAR);
            return YY;
        }
        public int getLastYear(Date date) {
            Calendar CD = Calendar.getInstance();
            CD.setTime(date);
            int YY = CD.get(Calendar.YEAR)-1;
            return YY;
        }
        /**
         * 得到当前月份
         *
         * @return
         */
        public int getNowMonth(Date date) {
            Calendar CD = Calendar.getInstance();
            CD.setTime(date);
            int MM = CD.get(Calendar.MONTH) + 1;
            return MM;
        }

        /**
         * 获取当前月的上一月
         *
         * @param date
         * @return
         */
        public int getLastMonth(Date date) {
            Calendar CD = Calendar.getInstance();
            CD.setTime(date);
            int MM = CD.get(Calendar.MONTH);
            return MM;
        }

        public int getLastMonth1(Date date) {
            Calendar CD = Calendar.getInstance();
            CD.setTime(date);
            int MM = CD.get(Calendar.MONTH) - 1;
            return MM;
        }

        public String getPreviousMonthEnd() {
            String str = "";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

            Calendar lastDate = Calendar.getInstance();
            lastDate.add(Calendar.MONTH, -1);//减一个月
            lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天
            lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天
            str = sdf.format(lastDate.getTime());
            return str;
        }

        /**
         * 得到当前日
         *
         * @return
         */
        public int getNowtDay(Date date) {
            Calendar CD = Calendar.getInstance();
            CD.setTime(date);
            int DD = CD.get(Calendar.DATE);
            return DD;
        }

        /**
         * 得到当前小时
         *
         * @return
         */
        public int getNowHour(Date date) {
            Calendar CD = Calendar.getInstance();
            CD.setTime(date);
            int DD = CD.get(Calendar.HOUR_OF_DAY);
            return DD;
        }

        public int getNowNumWeek(Date date) {
            Calendar CD = Calendar.getInstance();
            CD.setTime(date);
            int DD = CD.get(Calendar.WEEK_OF_MONTH);
            return DD;
        }

        public static String getNumDayOfWeek(Date date) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            int intWeek = calendar.get(Calendar.DAY_OF_WEEK);
            String strReturn = " ";
            switch (intWeek) {
                case Calendar.SUNDAY:
                    strReturn = "0";
                    break;
                case Calendar.MONDAY:
                    strReturn = "1";
                    break;
                case Calendar.TUESDAY:
                    strReturn = "2";
                    break;
                case Calendar.WEDNESDAY:
                    strReturn = "3";
                    break;
                case Calendar.THURSDAY:
                    strReturn = "4";
                    break;
                case Calendar.FRIDAY:
                    strReturn = "5";
                    break;
                case Calendar.SATURDAY:
                    strReturn = "6";
                    break;
            }
            return strReturn;
        }

        /**
         * 把字符串转换为日期
         *
         * @param dateStr 日期字符串
         * @param format  日期格式
         * @return
         */
        public static Date strToDate(String dateStr, String format) {
            Date date = null;

            if (dateStr != null && (!dateStr.equals(""))) {
                DateFormat df = new SimpleDateFormat(format);
                try {
                    date = df.parse(dateStr);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
            return date;
        }

        /**
         * 把字符串转换为日期,日期的格式为yyyy-MM-dd HH:ss
         *
         * @param dateStr 日期字符串
         * @return
         */
        public static Date strToDate(String dateStr) {
            Date date = null;

            if (dateStr != null && (!dateStr.equals(""))) {
                if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) {
                    dateStr = dateStr + " 00:00";
                } else if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}")) {
                    dateStr = dateStr + ":00";
                } else {
                    System.out.println(dateStr + " 格式不正确");
                    return null;
                }
                DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:ss");
                try {
                    date = df.parse(dateStr);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
            return date;
        }

        /**
         * 把日期转换为字符串
         *
         * @param date   日期实例
         * @param format 日期格式
         * @return
         */
        public static String dateToStr(Date date, String format) {
            return (date == null) ? "" :
                    new SimpleDateFormat(format).format(date);
        }

        /**
         * 取得当前日期 年-月-日
         *
         * @return
         */
        public static String getCurrentDate() {
            DateFormat f = new SimpleDateFormat("yyyy-MM-dd");
            return f.format(Calendar.getInstance().getTime());
        }

        /**
         * util date 转成字符串
         *
         * @param date
         * @return
         */
        public static String getStringDateTime(Date date) {
            String str = "";
            if (date != null)
                str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date).toString();
            return str;
        }

        /**
         * 返回指定日历中第几天的时间
         *
         * @param ref
         * @return
         */
        public static Date getDayOfWeekRef(Calendar calendar, int ref) {
            int thisDay = calendar.get(Calendar.DAY_OF_WEEK);
            int refDay = ref - thisDay;
            calendar.add(Calendar.DATE, refDay);
            return new Date(calendar.getTimeInMillis());
        }

        /**
         * 返回本周日历中第几天的时间
         *
         * @param ref
         * @return
         */
        public static Date getDayOfWeekRef(int ref) {
            Calendar c = Calendar.getInstance();
            int thisDay = c.get(Calendar.DAY_OF_WEEK);
            int refDay = ref - thisDay;
            c.add(Calendar.DATE, refDay);
            return new Date(c.getTimeInMillis());
        }

        /**
         * 判断星期
         *
         * @param date
         * @return
         */
        public static String getDayOfWeek(Date date) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            int intWeek = calendar.get(Calendar.DAY_OF_WEEK);
            String strReturn = " ";
            switch (intWeek) {
                case Calendar.SUNDAY:
                    strReturn = "Sunday";
                    break;
                case Calendar.MONDAY:
                    strReturn = "Monday";
                    break;
                case Calendar.TUESDAY:
                    strReturn = "Tuesday";
                    break;
                case Calendar.WEDNESDAY:
                    strReturn = "Wednesday";
                    break;
                case Calendar.THURSDAY:
                    strReturn = "Thursday";
                    break;
                case Calendar.FRIDAY:
                    strReturn = "Friday";
                    break;
                case Calendar.SATURDAY:
                    strReturn = "Saturday";
                    break;
            }
            return strReturn;
        }

        /**
         * 判断中文星期
         *
         * @param date
         * @return
         */
        public static String getGBKDayOfWeek(Date date) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            int intWeek = calendar.get(Calendar.DAY_OF_WEEK);
            String strReturn = " ";
            switch (intWeek) {
                case Calendar.SUNDAY:
                    strReturn = "星期日";
                    break;
                case Calendar.MONDAY:
                    strReturn = "星期一";
                    break;
                case Calendar.TUESDAY:
                    strReturn = "星期二";
                    break;
                case Calendar.WEDNESDAY:
                    strReturn = "星期三";
                    break;
                case Calendar.THURSDAY:
                    strReturn = "星期四";
                    break;
                case Calendar.FRIDAY:
                    strReturn = "星期五";
                    break;
                case Calendar.SATURDAY:
                    strReturn = "星期六";
                    break;
            }
            return strReturn;
        }

        /**
         * 两个日期相隔天数
         * @param start
         * @param end
         * @return
         */
        public static int getDays(Date start,Date end){
             Calendar cal = Calendar.getInstance();  
             cal.setTime(start);  
             long time1 = cal.getTimeInMillis();               
             cal.setTime(end);  
             long time2 = cal.getTimeInMillis();       
             long between_days=(time2-time1)/(1000*3600*24); 
             return (int)between_days;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值