0000006_java学习之路_JAVA日期处理

来源:互联网 发布:线刷会清除所有数据吗 编辑:程序博客网 时间:2024/06/05 08:29

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

    偏移量解释     比如今天时间是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