日期工具类

public class DateUtils {

    // 默认显示日期的格式
    public static final String DATE_FORMAT = "yyyy-MM-dd";
    public static final String YEAR_S_MONTH = "yyyy-MM";
    public static final String YEAR_MONTH = "yyyyMM";
    public static final String TIMEF_FORMAT = "yyyy-MM-dd HH:mm:ss";
    // 默认显示日期时间毫秒格式
    public static final String MSEL_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
    // 默认显示简体中文日期的格式
    public static final String ZHCN_DATE_FORMAT = "yyyy年MM月dd日";
    // 默认显示简体中文日期时间的格式
    public static final String ZHCN_TIME_FORMAT = "yyyy年MM月dd日HH时mm分ss秒";
    // 默认显示简体中文日期时间毫秒格式
    public static final String ZHCN_MSEL_FORMAT = "yyyy年MM月dd日HH时mm分ss秒SSS毫秒";
    // 获取日期串格式
    public static final String DATE_STR_FORMAT = "yyyyMMdd";
    // 获取日期时间串格式
    public static final String TIME_STR_FORMAT = "yyyyMMddHHmmss";
    // 获取日期时间毫秒串格式
    public static final String MSEL_STR_FORMAT = "yyyyMMddHHmmssSSS";

    // 默认显示日期时间分钟格式
    public static final String MSEL_MIU_FORMAT = "yyyy-MM-dd HH:mm";

    public static final String MS_MIU_FORMAT = "yyyyMMddHH";

    private static DateFormat dateFormat = null;
    private static DateFormat dateTimeFormat = null;
    private static DateFormat zhcnDateFormat = null;
    private static DateFormat zhcnDateTimeFormat = null;
    private static DateFormat timeStrFormat = null;
    static{
        dateFormat = new SimpleDateFormat(DATE_FORMAT);
        dateTimeFormat = new SimpleDateFormat(TIMEF_FORMAT);
        zhcnDateFormat = new SimpleDateFormat(ZHCN_DATE_FORMAT);
        zhcnDateTimeFormat = new SimpleDateFormat(ZHCN_TIME_FORMAT);
        timeStrFormat = new SimpleDateFormat(TIME_STR_FORMAT);
    }

    /**
     * 获取今天的日期,格式如:2006-11-09
     * 
     * @return String - 返回今天的日期
     */
    public static String getToday(){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }

    /**
     * 获取今天的日期,格式自定
     * 
     * @param pattern - 设定显示格式
     * @return String - 返回今天的日期
     */
    public static String getToday(String pattern){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(pattern);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }

    /**
     * 得到当前时间的前/后若干天的时间 例如当前时间2006-05-16 间隔天数30天,则返回2006-04-16
     * 
     * @param days - 间隔天数
     * @return String - 返回当时的时间
     */
    public static String getInternalTimeByDay(int days){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        now.add(Calendar.DATE, days);
        return (sdf.format(now.getTime()));
    }

    /**
     * 得到当前时间的前/后若干天的时间 例如当前时间2006-05-16 间隔天数30天,则返回2006-04-16
     * 
     * @param days - 间隔天数
     * @param pattern - 设定显示格式
     * @return String - 根据显示格式返回当时的时间
     */
    public static String getInternalTimeByDay(int days,String pattern){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(pattern);
        sdf.setTimeZone(TimeZone.getDefault());
        now.add(Calendar.DATE, days);
        return (sdf.format(now.getTime()));
    }

    /**
     * 得到当前时间的前/后若干月的时间 例如当前时间2006-05-16 间隔月数3月,则返回2006-02-16
     * 
     * @param months - 间隔月数
     * @return - 返回当时的时间
     */
    public static String getInternalTimeByMonth(int months){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        now.add(Calendar.MONTH, months);
        return (sdf.format(now.getTime()));
    }

    /**
     * 得到当前时间的前/后若干月的时间 例如当前时间2006-05-16 间隔月数3月,则返回2006-02-16
     * 
     * @param months - 间隔月数
     * @param pattern - 设定显示格式
     * @return - 根据显示格式返回当时的时间
     */
    public static String getInternalTimeByMonth(int months,String pattern){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(pattern);
        sdf.setTimeZone(TimeZone.getDefault());
        now.add(Calendar.MONTH, months);
        return (sdf.format(now.getTime()));
    }
    /**
     * 得到当前时间的前/后若干月的时间 例如当前时间2018-07-16 间隔1年,则返回2019-07-16
     * @param years
     * @param pattern
     * @return
     */
    public static String getInternalTimeByYear(int years,String pattern){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(pattern);
        sdf.setTimeZone(TimeZone.getDefault());
        now.add(Calendar.YEAR, years);
        return (sdf.format(now.getTime()));
    }
    /**
     * 得到当前时间的前/后若干月的时间 例如当前时间2018-07-16 间隔1.5年,则返回2021-01-16
     * @param years
     * @param pattern
     * @return
     */
    public static String getInternalTimeByYm(int years,int months,String pattern){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(pattern);
        sdf.setTimeZone(TimeZone.getDefault());
        now.add(Calendar.YEAR, years);
        now.add(Calendar.MONTH, months);
        return (sdf.format(now.getTime()));
    }

    /**
     * 得到中文日期
     * 
     * @param dateStr - 日期串,格式为“yyyy-MM-dd”
     * @return String - 返回中文日期,格式为“yyyy年MM月dd日”
     */
    public static String chinaDate(String dateStr){
        if(dateStr == null || dateStr.equals("null") || dateStr.equals("")){ return ""; }
        java.util.Date d = getDate(dateStr, DATE_FORMAT);
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(ZHCN_DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(d));
    }

    /**
     * 得到中文日期,自定设置格式
     * 
     * @param dateStr - 需要改变格式的时间串
     * @param inPattern - 时间串的格式
     * @param outPattern - 改为时间串的格式
     * @return String - 根据outPattern格式返回时间
     */
    public static String alterDateByDynamic(String dateStr,String inPattern,String outPattern){
        if(dateStr == null || dateStr.equals("null") || dateStr.equals("")){ return ""; }
        java.util.Date d = getDate(dateStr, inPattern);
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(outPattern);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(d));
    }

    /**
     * 比较当前日期和指定日期 return boolean 如果当前日期在指定日期之后返回true否则返回flase
     * 
     * @param dateStr 指定日期
     * @param pattern 指定日期的格式
     * @return boolean
     */
    public static boolean dateCompare(String dateStr,String pattern){
        boolean bea = false;
        SimpleDateFormat sdf_d = new SimpleDateFormat(pattern);
        String isDate = sdf_d.format(new java.util.Date());
        java.util.Date date1;
        java.util.Date date0;
        try{
            date1 = sdf_d.parse(dateStr);
            date0 = sdf_d.parse(isDate);
            if(date0.after(date1)){
                bea = true;
            }
        }catch(ParseException e){
            bea = false;
        }
        return bea;
    }

    /**
     * 比较指定两日期,如果dateStr1晚于dateStr2则return true;
     * 
     * @param dateStr1 指定日期
     * @param dateStr2 指定日期
     * @param pattern 指定日期的格式
     * @return boolean
     */
    public static boolean dateCompare(String dateStr1,String dateStr2,String pattern){
        boolean bea = false;
        SimpleDateFormat sdf_d = new SimpleDateFormat(pattern);
        java.util.Date date1;
        java.util.Date date0;
        try{
            date1 = sdf_d.parse(dateStr1);
            date0 = sdf_d.parse(dateStr2);
            if(date0.after(date1)){
                bea = true;
            }
        }catch(ParseException e){
            bea = false;
        }
        return bea;
    }

    /**
     * 设置间隔数后返回时间
     * 
     * @param type 间隔类型 秒或者天 秒的类型为s,天的类型为d
     * @param 间隔数字 比如1秒或者一天
     * @return String 返回时间格式为“yyyy-MM-dd HH:mm:ss”
     */
    public static String dateAdd(String type,int i){
        return dateAdd(type, i, TIMEF_FORMAT);
    }

    public static String dateAdd(String type,int i,String format){
        SimpleDateFormat df = new SimpleDateFormat(format);
        String str = getToday(format);
        Calendar c = Calendar.getInstance(); // 当时的日期和时间
        if(type.equals("s")){
            int s = c.get(Calendar.SECOND);
            s = s + i;
            c.set(Calendar.SECOND, s);
            str = df.format(c.getTime());
        }else if(type.equals("d")){
            int d = c.get(Calendar.DAY_OF_MONTH); // 取出“日”数
            d = d + i;
            c.set(Calendar.DAY_OF_MONTH, d); // 将“日”数设置回去
            str = df.format(c.getTime());
        }else if(type.equals("h")){
            int d = c.get(Calendar.HOUR_OF_DAY); // 取出“日”数
            d = d + i;
            c.set(Calendar.HOUR_OF_DAY, d); // 将“日”数设置回去
            str = df.format(c.getTime());
        }else if(type.equals("m")){
            int d = c.get(Calendar.MINUTE); // 取出“分钟”数
            d = d + i;
            c.set(Calendar.MINUTE, d); // 将“日”数设置回去
            str = df.format(c.getTime());
        }
        return str;
    }
    
    public static String dateAdd(String date,String type,int i,String format){
        SimpleDateFormat df = new SimpleDateFormat(format);
        String str = date;
        Calendar c = Calendar.getInstance(); // 当时的日期和时间
        c.setTime(getDate(date,format));
        if(type.equals("s")){
            int s = c.get(Calendar.SECOND);
            s = s + i;
            c.set(Calendar.SECOND, s);
            str = df.format(c.getTime());
        }else if(type.equals("d")){
            int d = c.get(Calendar.DAY_OF_MONTH); // 取出“日”数
            d = d + i;
            c.set(Calendar.DAY_OF_MONTH, d); // 将“日”数设置回去
            str = df.format(c.getTime());
        }else if(type.equals("h")){
            int d = c.get(Calendar.HOUR_OF_DAY); // 取出“日”数
            d = d + i;
            c.set(Calendar.HOUR_OF_DAY, d); // 将“日”数设置回去
            str = df.format(c.getTime());
        }else if(type.equals("m")){
            int d = c.get(Calendar.MINUTE); // 取出“分钟”数
            d = d + i;
            c.set(Calendar.MINUTE, d); // 将“日”数设置回去
            str = df.format(c.getTime());
        }
        return str;
    }

    /**
     * 得到当前日期,如"2001-03-16".
     *
     * @version 1.0
     */
    public static String curDate(){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        String DATE_FORMAT = "yyyy-MM-dd";
        // String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
        // String DATE_FORMAT = "yyyyMMdd";
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }

    /**
     * 得到当前详细日期、时间,如"2001-03-16 20:34:20".
     */
    public static String curTime(){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(TIMEF_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }

    /**
     * 得到当前详细日期、时间,如"2001-03-16 20:34:20".
     *
     * @version 1.0
     */
    public static String getTimeAfter(int n){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.add(Calendar.MINUTE, n);
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(TIMEF_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }

    /**
     * 得到当前时间的前/后若干天的时间
     * 
     * @param day - 间隔时间
     * @return - 返回当时的时间 例如当前时间2003-05-16 间隔天数30天,则返回2003-04-16
     */
    public static String getInternalTime(int days){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(TIMEF_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        now.add(Calendar.DATE, days);
        return (sdf.format(now.getTime()));
    }

    /**
     * 得到当前时间的前/后若干天的时间
     * 
     * @param currentTime - 当前时间
     * @param iHour - 间隔时间
     * @return - 返回当时的时间 例如当前时间2003-05-16 08:10:10 间隔时间3小时,则返回2003-05-16 05:10:10
     */
    public static String getTimeOut(String currentTime,int iHour){
        String Time = "";
        try{
            SimpleDateFormat sdf = new SimpleDateFormat(TIMEF_FORMAT);
            java.util.Date result = sdf.parse(currentTime);
            Calendar cal = Calendar.getInstance();
            cal.setTime(result);
            cal.add(Calendar.HOUR, iHour);
            Time = sdf.format(cal.getTime());
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
        return Time;
    }

    /**
     * 得到当前月底的前/后若干天的时间
     * 
     * @param day - 间隔时间
     * @return - 返回当时的时间
     */
    public static String getInternalTimeByLastDay(int days){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        String DATE_FORMAT = "yyyy-MM-dd";
        // String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
        // String DATE_FORMAT = "yyyyMMdd";
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        int maxDay = now.getActualMaximum(Calendar.DAY_OF_MONTH);
        now.set(Calendar.DATE, maxDay);
        now.add(Calendar.DATE, days);
        return (sdf.format(now.getTime()));
    }

    /**
     * 得到时间串
     * 
     * @param dateStr String 时间字符串
     * @param fmt String 时间格式
     * @return String 返回值
     */
    public static String getDateStr(String dateStr,String fmt){
        try{
            if(dateStr == null || dateStr.equals("")){ return ""; }
            java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(fmt);
            java.util.Date d = sdf.parse(dateStr);
            String newDate = sdf.format(d);
            return newDate;
        }catch(Exception e){
            // log.debug("\n" + e.getMessage());
        }
        return "";
    }

    /**
     * 得到时间串
     * 
     * @param dateStr String 时间字符串
     * @param fmt String 时间格式
     * @return String 返回值
     */
    public static java.util.Date getDate(String dateStr){
        try{
            if(dateStr == null || dateStr.equals("")){ return null; }
            // Calendar now = Calendar.getInstance(TimeZone.getDefault());
            String DATE_FORMAT = "yyyyMMddHHmmss";
            // java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
            java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
            // sdf.setTimeZone(TimeZone.getDefault());
            java.util.Date d = sdf.parse(dateStr);
            // java.text.DateFormat df = java.text.DateFormat.getDateTimeInstance();
            // java.util.Date d= df.parse(dateStr);
            return d;
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * @return 得到当前时间目录例如 030524
     */
    public static String getCurrTimeDir(){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        String DATE_FORMAT = "yyMMdd";
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }

    /**
     * @return 得到上个月月份 如200505
     */
    public static String getYesterM(){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.add(Calendar.MONTH, -2);
        String DATE_FORMAT = "yyyyMM";
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }

    /**
     * @return 得到本年度年份 如2005
     */
    public static String getYear(){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        // now.add(Calendar.MONTH,-1);
        String DATE_FORMAT = "yyyy";
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }

    /**
     * @return 得到本月月份 如09
     */
    public static String getMonth(){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        String DATE_FORMAT = "MM";
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }

    /**
     * 得到下一个月分,包括年,例如: 2003-1 月份的上一个月份是2002-12
     * 
     * @param year
     * @param month
     * @return
     */
    public static String[] getBeforeMonth(String year,String month){
        String[] time = new String[2];
        if(month.equals("12")){
            time[1] = "1";
            time[0] = String.valueOf(Integer.parseInt(year) + 1);
        }else{
            time[1] = String.valueOf(Integer.parseInt(month) + 1);
            time[0] = year;
        }
        return time;
    }

    /**
     * 得到上一个月
     * 
     * @param year 年
     * @param month 月
     * @return String[] 0为年,1为月 TODO
     */
    public static String[] beforeMonth(String year,String month){
        String[] time = new String[2];
        if(month.equals("1")){
            time[1] = "12";
            time[0] = String.valueOf(Integer.parseInt(year) - 1);
        }else{
            time[1] = String.valueOf(Integer.parseInt(month) - 1);
            time[0] = year;
        }
        return time;
    }

    /**
     * 得到当前日期,按照页面日期控件格式,如"2001-3-16".
     * 
     * @return String TODO
     */
    public static String curSingleNumDate(){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        String DATE_FORMAT = "yyyy-M-d";
        // String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
        // String DATE_FORMAT = "yyyyMMdd";
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }

    /**
     * 取自当前日期后的第n天的日期
     * 
     * @param day int 之后n天
     * @return String
     */
    public static String getDateAfter(int n){
        String Time = "";
        try{
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Calendar cal = Calendar.getInstance(TimeZone.getDefault());
            cal.add(Calendar.DAY_OF_MONTH, n);
            Time = sdf.format(cal.getTime());
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
        return Time;
    }

    /**
     * 得到半年前的日期
     * 
     * @return String
     */
    public static String getHalfYearBeforeStr(){
        java.util.GregorianCalendar cal = new java.util.GregorianCalendar();
        /** @todo 取当前日期 */
        String month = "";
        int tMonth = cal.get(GregorianCalendar.MONTH) + 1;
        if(tMonth < 10){
            month = "0" + tMonth;
        }else{
            month = "" + tMonth;
        }
        int tDay = cal.get(GregorianCalendar.DATE);
        String day = "";
        if(tDay < 10){
            day = "0" + tDay;
        }else{
            day = "" + tDay;
        }
        // String endDate = "" + cal.get(GregorianCalendar.YEAR) + month + day;
        /** @todo 取半年前日期 */
        cal.add(GregorianCalendar.MONTH, -6);
        tMonth = cal.get(GregorianCalendar.MONTH) + 1;
        if(tMonth < 10){
            month = "0" + tMonth;
        }else{
            month = "" + tMonth;
        }
        tDay = cal.get(GregorianCalendar.DATE);
        day = "";
        if(tDay < 10){
            day = "0" + tDay;
        }else{
            day = "" + tDay;
        }
        String beginDate = "" + cal.get(GregorianCalendar.YEAR) + month + day;
        return beginDate;
    }

    /**
     * 返回比当前日期晚几分钟的一个yyyy-MM-dd HH:mm:ss的日期串晚的分钟数可由输入参数minute控制
     * 
     * @param minute
     * @return 返回延迟N分钟后的时间串
     */
    public static String getCurrentNextMinute(int minute){
        String chargeStartTime = "";
        try{
            Calendar cal = Calendar.getInstance();
            cal.setTime(new java.util.Date());
            cal.add(Calendar.MINUTE, minute);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            chargeStartTime = sdf.format(cal.getTime());
        }catch(Exception e){
            e.printStackTrace();
        }
        return chargeStartTime;
    }

    /**
     * 得到当前分钟
     * 
     * @return int
     */
    public static int getCurMin(){
        java.util.Date date = new java.util.Date();
        java.text.SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat("mm");
        int currentTime = Integer.parseInt(simpleDateFormat.format(date));
        return currentTime;
    }

    /**
     * @param formatStr
     * @return
     */
    private static DateFormat getDateFormat(String formatStr){
        if(formatStr.equalsIgnoreCase(DATE_FORMAT)){
            return dateFormat;
        }else if(formatStr.equalsIgnoreCase(TIMEF_FORMAT)){
            return dateTimeFormat;
        }else if(formatStr.equalsIgnoreCase(ZHCN_DATE_FORMAT)){
            return zhcnDateFormat;
        }else if(formatStr.equalsIgnoreCase(ZHCN_TIME_FORMAT)){
            return zhcnDateTimeFormat;
        }else{
            return new SimpleDateFormat(formatStr);
        }
    }

    /**
     * 按照默认formatStr的格式,转化dateTimeStr为Date类型 dateTimeStr必须是formatStr的形式
     * 
     * @param dateTimeStr
     * @param formatStr
     * @return
     */
    public static Date getDate(String dateTimeStr,String formatStr){
        try{
            if(dateTimeStr == null || dateTimeStr.equals("")){ return null; }
            DateFormat sdf = getDateFormat(formatStr);
            java.util.Date d = sdf.parse(dateTimeStr);
            return d;
        }catch(ParseException e){
            // throw new LangException(e);
        }
        return null;
    }

    /**
     * 将Date转换成字符串“yyyy-mm-dd hh:mm:ss”的字符串
     * 
     * @param date 日期
     * @return String 字符串 TODO
     */
    public static String dateToDateString(Date date){
        return dateToDateString(date, TIMEF_FORMAT);
    }

    /**
     * 将Date转换成formatStr格式的字符串
     * 
     * @param date
     * @param formatStr
     * @return
     */
    public static String dateToDateString(Date date,String formatStr){
        DateFormat df = getDateFormat(formatStr);
        return df.format(date);
    }

    /**
     * 返回一个yyyy-MM-dd HH:mm:ss 形式的日期时间字符串中的HH:mm:ss
     * 
     * @param dateTime
     * @return
     */
    public static String getTimeString(String dateTime){
        return getTimeString(dateTime, TIMEF_FORMAT);
    }

    /**
     * 返回一个formatStr格式的日期时间字符串中的HH:mm:ss
     * 
     * @param dateTime
     * @param formatStr
     * @return
     */
    public static String getTimeString(String dateTime,String formatStr){
        Date d = getDate(dateTime, formatStr);
        String s = dateToDateString(d);
        return s.substring(TIMEF_FORMAT.indexOf('H'));
    }

    /**
     * 获取当前日期yyyy-MM-dd的形式
     * 
     * @return
     */
    public static String getCurDate(){
        return dateToDateString(new Date(), DATE_FORMAT);
    }

    /**
     * 获取当前日期yyyy年MM月dd日的形式
     * 
     * @return
     */
    public static String getCurZhCNDate(){
        return dateToDateString(new Date(), ZHCN_DATE_FORMAT);
    }

    /**
     * 获取当前日期时间yyyy-MM-dd HH:mm:ss的形式
     * 
     * @return
     */
    public static String getCurDateTime(){
        return dateToDateString(new Date(), TIMEF_FORMAT);
    }

    /**
     * 获取当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式
     * 
     * @return
     */
    public static String getCurZhCNDateTime(){
        return dateToDateString(new Date(), ZHCN_TIME_FORMAT);
    }

    /**
     * 获取日期d的days天后的一个Date
     * 
     * @param d
     * @param days
     * @return Date
     */
    public static Date getInternalDateByDay(Date d,int days){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        now.add(Calendar.DATE, days);
        return now.getTime();
    }

    /**
     * 获取日期d的months月后的一个Date
     * 
     * @param d
     * @param months
     * @return Date
     */
    public static Date getInternalDateByMon(Date d,int months){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        now.add(Calendar.MONTH, months);
        return now.getTime();
    }

    /**
     * 获取日期d的years年后的一个Date
     * 
     * @param d
     * @param years
     * @return Date
     */
    public static Date getInternalDateByYear(Date d,int years){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        now.add(Calendar.YEAR, years);
        return now.getTime();
    }

    /**
     * 获取日期d的sec秒后的一个Date
     * 
     * @param d
     * @param sec
     * @return Date
     */
    public static Date getInternalDateBySec(Date d,int sec){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        now.add(Calendar.SECOND, sec);
        return now.getTime();
    }

    /**
     * 获取日期d的min分后的一个Date
     * 
     * @param d
     * @param min
     * @return Date
     */
    public static Date getInternalDateByMin(Date d,int min){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        now.add(Calendar.MINUTE, min);
        return now.getTime();
    }

    /**
     * 获取日期d的hours小时后的一个Date
     * 
     * @param d
     * @param hours
     * @return Date
     */
    public static Date getInternalDateByHour(Date d,int hours){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        now.add(Calendar.HOUR_OF_DAY, hours);
        return now.getTime();
    }

    /**
     * 根据一个日期字符串,返回日期格式,目前支持4种 如果都不是,则返回null
     * 
     * @param DateString
     * @return 返回日期格式,目前支持4种
     */
    public static String getFormateStr(String DateString){
        String patternStr1 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"; // "yyyy-MM-dd"
        String patternStr2 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}"; // "yyyy-MM-dd HH:mm:ss";
        String patternStr3 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日"; // "yyyy年MM月dd日"
        String patternStr4 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日[0-9]{1,2}时[0-9]{1,2}分[0-9]{1,2}秒"; // "yyyy年MM月dd日HH时mm分ss秒"
        Pattern p = Pattern.compile(patternStr1);
        Matcher m = p.matcher(DateString);
        boolean b = m.matches();
        if(b){ return DATE_FORMAT; }
        p = Pattern.compile(patternStr2);
        m = p.matcher(DateString);
        b = m.matches();
        if(b){ return TIMEF_FORMAT; }
        p = Pattern.compile(patternStr3);
        m = p.matcher(DateString);
        b = m.matches();
        if(b){ return ZHCN_DATE_FORMAT; }
        p = Pattern.compile(patternStr4);
        m = p.matcher(DateString);
        b = m.matches();
        if(b){ return ZHCN_TIME_FORMAT; }
        return null;
    }

    /**
     * 将一个"yyyy-MM-dd HH:mm:ss"字符串,转换成"yyyy年MM月dd日HH时mm分ss秒"的字符串
     * 
     * @param dateStr
     * @return
     */
    public static String getZhCNDateTime(String dateStr){
        Date d = getDate(dateStr);
        return dateToDateString(d, ZHCN_TIME_FORMAT);
    }

    /**
     * 将一个"yyyy-MM-dd"字符串,转换成"yyyy年MM月dd日"的字符串
     * 
     * @param dateStr
     * @return
     */
    public static String getZhCNDate(String dateStr){
        Date d = getDate(dateStr, DATE_FORMAT);
        return dateToDateString(d, ZHCN_DATE_FORMAT);
    }

    /**
     * 将dateStr从fmtFrom转换到fmtTo的格式
     * 
     * @param dateStr
     * @param fmtFrom
     * @param fmtTo
     * @return
     */
    public static String getDateStr(String dateStr,String fmtFrom,String fmtTo){
        Date d = getDate(dateStr, fmtFrom);
        return dateToDateString(d, fmtTo);
    }

    /**
     * 将小时数换算成返回以毫秒为单位的时间
     * 
     * @param hours
     * @return
     */
    public static long getMicroSec(BigDecimal hours){
        BigDecimal bd;
        bd = hours.multiply(new BigDecimal(3600 * 1000));
        return bd.longValue();
    }

    /**
     * 获取Date中的分钟
     * 
     * @param d
     * @return
     */
    public static int getMin(Date d){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        return now.get(Calendar.MINUTE);
    }

    /**
     * 获取xxxx-xx-xx的日
     * 
     * @param d
     * @return
     */
    public static int getDay(Date d){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        return now.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 获取月份,1-12月
     * 
     * @param d
     * @return
     */
    public static int getMonth(Date d){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        return now.get(Calendar.MONTH) + 1;
    }

    /**
     * 获取19xx,20xx形式的年
     * 
     * @param d
     * @return
     */
    public static int getYear(Date d){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        return now.get(Calendar.YEAR);
    }

    /**
     * 得到d的上个月的年份+月份,如200505
     * 
     * @return
     */
    public static String getYearMonthOfLastMon(Date d){
        Date newdate = getInternalDateByMon(d, -1);
        String year = String.valueOf(getYear(newdate));
        String month = String.valueOf(getMonth(newdate));
        return year + month;
    }

    /**
     * 得到当前日期的年和月如200509
     * 
     * @return String
     */
    public static String getCurYearMonth(){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        String DATE_FORMAT = "yyyyMM";
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }

    /**
     * @param year
     * @param month
     * @return
     */
    public static Date getNextMonth(String year,String month){
        String datestr = year + "-" + month + "-01";
        Date date = getDate(datestr, DATE_FORMAT);
        return getInternalDateByMon(date, 1);
    }

    /**
     * @param year
     * @param month
     * @return
     */
    public static Date getLastMonth(String year,String month){
        String datestr = year + "-" + month + "-01";
        Date date = getDate(datestr, DATE_FORMAT);
        return getInternalDateByMon(date, -1);
    }

    /**
     * 得到日期d,按照页面日期控件格式,如"2001-3-16"
     * 
     * @param d
     * @return
     */
    public static String getSingleNumDate(Date d){
        return dateToDateString(d, DATE_FORMAT);
    }

    /**
     * 得到d半年前的日期,"yyyy-MM-dd"
     * 
     * @param d
     * @return
     */
    public static String getHalfYearBeforeStr(Date d){
        return dateToDateString(getInternalDateByMon(d, -6), DATE_FORMAT);
    }

    /**
     * 得到当前日期D的月底的前/后若干天的时间,<0表示之前,>0表示之后
     * 
     * @param d
     * @param days
     * @return
     */
    public static String getInternalDateByLastDay(Date d,int days){
        return dateToDateString(getInternalDateByDay(d, days), DATE_FORMAT);
    }

    public static java.sql.Date getSqlDate(String dateTimeStr){
        // DateUtils.getTIME_STR_FORMAT
        java.sql.Date d = new java.sql.Date(DateUtils.getDate(dateTimeStr, DateUtils.TIME_STR_FORMAT).getTime());
        // d.setHours(Integer.parseInt(dateTimeStr.substring(8,10)));
        // d.setMinutes(Integer.parseInt(dateTimeStr.substring(10,12)));
        // d.setSeconds(Integer.parseInt(dateTimeStr.substring(12,14)));
        return d;
    }

    /**
     * 获取上一个月
     * 
     * @param ym 2013-09
     * @param month
     * @param pattern
     * @return
     */
    public static String getLastMonth(String ym,int month,String pattern){
        Date date = getDate(ym, YEAR_S_MONTH);
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(date);
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(pattern);
        sdf.setTimeZone(TimeZone.getDefault());
        now.add(Calendar.MONTH, month);
        return sdf.format(now.getTime());
    }

    /**
     * 返回当月最后一天的日期
     */
    public static String getLastDayOfMonth(Date date){
        Calendar calendar = convert(date);
        calendar.set(Calendar.DATE, calendar.getMaximum(Calendar.DATE));
        DateFormat format = new SimpleDateFormat(DATE_FORMAT);
        return format.format(calendar.getTime());
    }

    /**
     * 将日期转换为日历
     * 
     * @param date 日期
     * @return 日历
     */
    private static Calendar convert(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar;
    }

    /**
     * date2 - date1 = 多少天
     * 
     * @param date1
     * @param date2
     * @return
     */
    public static long getDiffersDays(String date1,String date2){
        try{
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
            Date d1 = sdf.parse(date1);
            Date d2 = sdf.parse(date2);
            long daysBetween = (d2.getTime() - d1.getTime() + 1000000) / (3600 * 24 * 1000);
            return daysBetween;
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return 0;
    }

    /**
     * 计算两个日期之间相差的天数 (date2 - date1)
     * 
     * @param date1
     * @param date2
     * @return
     */
    public static int daysBetween(Date date1,Date date2){
        Calendar cal = Calendar.getInstance();
        cal.setTime(date1);
        long time1 = cal.getTimeInMillis();
        cal.setTime(date2);
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);

        return Integer.parseInt(String.valueOf(between_days));
    }

    /**
     * 计算两个日期相差天数
     * 
     * @param smdate
     * @param bdate
     * @return
     * @throws ParseException
     */
    public static int daysBetween(String smdate,String bdate){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try{
            Calendar cal = Calendar.getInstance();
            cal.setTime(sdf.parse(smdate));
            long time1 = cal.getTimeInMillis();
            cal.setTime(sdf.parse(bdate));
            long time2 = cal.getTimeInMillis();
            long between_days = (time2 - time1) / (1000 * 3600 * 24);
            return Integer.parseInt(String.valueOf(between_days));
        }catch(ParseException ex){
            ex.printStackTrace();
        }
        return 0;
    }
    /**
     * 计算两个时间相差的月份
     * @param start
     * @param end
     * @return
     */
    public static int monthBetween(String start,String end){
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        try{
            Calendar cal = Calendar.getInstance();
            cal.setTime(sdf.parse(start));
            long time1 = cal.getTimeInMillis();
            cal.setTime(sdf.parse(end));
            long time2 = cal.getTimeInMillis();
            long between_days = (time2 - time1) / (1000 * 3600 * 24);
            return Integer.parseInt(String.valueOf(between_days));
        }catch(ParseException ex){
            ex.printStackTrace();
        }
        return 0;
    }
    /**
     * 根据给定日期Date返回星期几
     * 
     * @param date
     * @return
     */
    public static String getWeekOfDate(Date date){
        String[] weekOfDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        Calendar calendar = Calendar.getInstance();

        if(date != null){
            calendar.setTime(date);
        }

        int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;

        if(w < 0){
            w = 0;
        }

        return weekOfDays[w];
    }

    /**
     * 根据给定日期(字符串形式)返回星期几
     * 
     * @param date
     * @return
     */
    public static String getWeekOfDate(String date){
        Date d = getDate(date, "yy-MM-dd");
        return getWeekOfDate(d);
    }

    /**
     * 返回指定日期的下一个日期
     * 
     * @param d
     * @return
     */
    public static Date getNextDate(Date d){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        now.add(Calendar.DAY_OF_MONTH, 1);
        return now.getTime();
    }

    /**
     * 返回指定日期的下一个日期
     * 
     * @param d
     * @param dateFomat
     * @return
     */
    public static String getNextDate(String d,String dateFomat){
        Date date = getNextDate(getDate(d, dateFomat));
        DateFormat df = new SimpleDateFormat(dateFomat);
        return df.format(date);
    }

    /**
     * 获取Date中的小时
     * 
     * @param d
     * @return
     */
    public static int getHour(Date d){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(d);
        return now.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 给定时间,返回小时
     * 
     * @param d
     * @return
     */
    public static int getHour(String d){
        return getHour(getDate(d, "hh:mm:ss"));
    }

    public static int getMin(String d){
        return getMin(getDate(d, "hh:mm:ss"));
    }

    /**
     * 按指定格式返回日期字符串
     * 
     * @Title: formatDate
     * @param pattern
     * @return
     * @return: String
     */
    public static String formatDate(String pattern){
        return formatDate(new Date(), pattern);
    }

    /**
     * @Title: formatDate
     * @param date
     * @param pattern
     * @return
     * @return: String
     */
    public static String formatDate(Date date,String pattern){
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }

    /**
     * 格式化输出日期
     * 
     * @param date 日期
     * @param format 格式
     * @return 返回字符型日期
     */
    public static String format(java.util.Date date,String format){
        String result = "";
        try{
            if(date != null){
                java.text.DateFormat df = new java.text.SimpleDateFormat(format);
                result = df.format(date);
            }
        }catch(Exception e){}
        return result;
    }

    /**
     * @Title: getDateByStr
     * @param date
     * @return
     * @return: Date
     */
    public static Date getDateByStr(String date){
        return getDateByStr(date, TIMEF_FORMAT);
    }

    /**
     * @Title: getDateByStr
     * @param date
     * @param pattern
     * @return
     * @return: Date
     */
    public static Date getDateByStr(String date,String pattern){
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        try{
            return sdf.parse(date);
        }catch(ParseException e){
            e.printStackTrace();
        }
        return new Date();
    }

    /**
     * 补齐不足长度
     * 
     * @param length 长度
     * @param number 数字
     * @return
     */
    public static String lpad(int length,Long number){
        String f = "%0" + length + "d";
        // 超过的话 就截取
        String nuber_str = number + "";
        if(nuber_str.length() > length){ return nuber_str = nuber_str.substring(nuber_str.length() - length); }
        return String.format(f, number);
    }

    /**
     * 计算两个日期相差 毫秒数
     * 
     * @param smdate
     * @param bdate
     * @return
     * @throws ParseException
     */
    public static int millBetween(String smdate,String bdate){
        SimpleDateFormat sdf = new SimpleDateFormat(MSEL_FORMAT);
        try{
            Calendar cal = Calendar.getInstance();
            cal.setTime(sdf.parse(smdate));
            long time1 = cal.getTimeInMillis();
            cal.setTime(sdf.parse(bdate));
            long time2 = cal.getTimeInMillis();
            long between_days = (time2 - time1);
            return Integer.parseInt(String.valueOf(between_days));
        }catch(ParseException ex){
            ex.printStackTrace();
        }
        return 0;
    }

    /**
     * 签到日考勤统计 获取当前时间的时分秒
     * 
     * @author:黄泽亮
     * @return
     */
    public static String getEveryMinute(){
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");// 时:分:秒
        sdf.setTimeZone(TimeZone.getDefault());
        return (sdf.format(now.getTime()));
    }
    /**
     * 获取小数点后一位
     * @author: 黄泽亮
     * @param minutes
     * @return
     */
    public static String getPointOne(long minutes){
        double s = minutes / 60d;
        double newTime = (double)(Math.floor(s * 10d) / 10);
        return newTime + "";
    }
    
    /**
     * 获取当月工作日天数
     * @author: 黄泽亮
     * @return
     */
    public static int getWorkingDay(){
        String input =dateToDateString(new Date(),"yyyy-MM");
        int count = 0;
        int month = Integer.parseInt(input.substring(5, 7));
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, Integer.parseInt(input.substring(0, 4)));
        cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.DATE, 1);

        while(cal.get(Calendar.MONTH) < month){
            int day = cal.get(Calendar.DAY_OF_WEEK);

            if(!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)){
                count++;
            }
            cal.add(Calendar.DATE, 1);
        }
        return count;
    }
    /**
     * 获取某个月的法定工作日
     * @author: 黄泽亮
     * @param dateStr
     * @return
     */
    public static int getMonthWorkingDay(String dateStr){
        int count = 0;
        int month = Integer.parseInt(dateStr.substring(5, 7));
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, Integer.parseInt(dateStr.substring(0, 4)));
        cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.DATE, 1);

        while(cal.get(Calendar.MONTH) < month){
            int day = cal.get(Calendar.DAY_OF_WEEK);

            if(!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)){
                count++;
            }
            cal.add(Calendar.DATE, 1);
            if(month==12 && cal.get(Calendar.MONTH) == 0) break;
        }
        return count;
    }
    
    
    /**
     * 获取当月第一天  返回格式例  2016-06-01
     * @author: 黄泽亮
     * @param date
     * @return
     */
    public static String getFirstDayOfMonth(Date date){
        Calendar calendar = convert(date);
        calendar.set(Calendar.DATE, calendar.getMinimum(Calendar.DATE));
        DateFormat format = new SimpleDateFormat(DATE_FORMAT);
        return format.format(calendar.getTime());
    }
    
    /**
  * 返回当月最后一天的日期 eg: 2016-06-30
  * @author: 黄泽亮
  * @param date
  * @return
  */
    public static String getActualLastDayOfMonth(Date date){
        Calendar calendar = convert(date);
        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
        DateFormat format = new SimpleDateFormat(DATE_FORMAT);
        return format.format(calendar.getTime());
    }
    
    public static String getFirstDayOfWeek(Date date){
        Calendar calendar = convert(date);
        calendar.setFirstDayOfWeek(Calendar.SUNDAY);
        calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
        DateFormat format = new SimpleDateFormat(DATE_FORMAT);
        return format.format(calendar.getTime());
    }
    
    public static String getLastDayOfWeek(Date date){
     Calendar calendar = convert(date);
        calendar.setFirstDayOfWeek(Calendar.SUNDAY);
        calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek()+6);
        DateFormat format = new SimpleDateFormat(DATE_FORMAT);
        return format.format(calendar.getTime());
    }
    
    /**
     * 获取当天是 年+第几周
     * @author: 黄泽亮
     * @return
     */
    public static String getWeekOfYear(){
        Calendar c = Calendar.getInstance();
        String y = c.get(Calendar.YEAR)+"";
        String wk = c.get(Calendar.WEEK_OF_YEAR)+"";
        return y + wk;//年+第几周
    }
    /**
     * 得到某一天的该星期的第一日
     * @author: 黄泽亮
     * @param date
     * @param firstDayOfWeek
     * @return
     */
    public static Date getFirstDayOfWeek(Date date, int firstDayOfWeek) {
        Calendar cal = Calendar.getInstance();
        if (date != null)
         cal.setTime(date);
        cal.setFirstDayOfWeek(firstDayOfWeek);//设置一星期的第一天是哪一天
        cal.set(Calendar.DAY_OF_WEEK, firstDayOfWeek);//指示一个星期中的某天
        cal.set(Calendar.HOUR_OF_DAY, 0);//指示一天中的小时。HOUR_OF_DAY 用于 24 小时制时钟。例如,在 10:04:15.250 PM 这一时刻,HOUR_OF_DAY 为 22。
        cal.set(Calendar.MINUTE, 0);//指示一小时中的分钟。例如,在 10:04:15.250 PM 这一时刻,MINUTE 为 4。
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
       }
    /**
     * 获取上周一时间
     */
    public static Date lastMonday() {
        Calendar calendar = Calendar.getInstance();
        while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
            calendar.add(Calendar.DAY_OF_WEEK, -1);
        }
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        int offset = 1 - dayOfWeek;
        calendar.add(Calendar.DATE, offset - 7);
        return getFirstDayOfWeek(calendar.getTime(), 2);
    }
    /**
     * 上周是一年中的第几周
     * @author: 黄泽亮
     * @return
     * @throws ParseException
     */
    public static String getLastWeekOfYear() throws ParseException{
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
        cal.setTime(format.parse(format.format(lastMonday())));
        String y = cal.get(Calendar.YEAR) + "";
        String  week = cal.get(Calendar.WEEK_OF_YEAR) + "";
        return y + week;
    }
    /**
     * 获取下个月第一天
     * @return
     */
    public static Date nextMonthFirstDay(){
     Calendar c = Calendar.getInstance();
     c.set(Calendar.MONTH, c.get(Calendar.MONTH)+1);
     c.set(Calendar.DAY_OF_MONTH, 1);
     c.set(Calendar.HOUR_OF_DAY, 0);
     c.set(Calendar.MINUTE, 0);
     c.set(Calendar.SECOND, 0);
     return c.getTime();
    }
    /**
     * 获取每个月工作日列表
     * @param year
     * @param month
     * @return
     */
    public static List<String> getWorking(int year,int month){    
        List<String> dates = new ArrayList<String>();
        Calendar cal = Calendar.getInstance();    
        cal.set(Calendar.YEAR, year);    
        cal.set(Calendar.MONTH,  month - 1);    
        cal.set(Calendar.DATE, 1);        
            
        while(cal.get(Calendar.YEAR) == year &&     
                cal.get(Calendar.MONTH) < month){    
            int day = cal.get(Calendar.DAY_OF_WEEK); 
            if(!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)){
                dates.add(dateToDateString((Date)cal.getTime().clone(),DATE_FORMAT));    
            }    
            cal.add(Calendar.DATE, 1);    
        }    
        return dates;
    }   
    /**
     * 获取年份
     * @author: 黄泽亮   输入参数格式:  2016-07
     * @param dateStr
     * @return
     */
    public static int getYear(String dateStr){
        int year = Integer.parseInt(dateStr.substring(0, 4));
        return year;
    }
    /**
     * 获取月份
     * @author: 黄泽亮  输入参数格式:  2016-07
     * @param dateStr
     * @return
     */
    public static int getMonth(String dateStr){
        int month = Integer.parseInt(dateStr.substring(5, 7));
        return month;
    }
    /**
     * 获取下个月的第一天的零时零分零秒
     * @param month 向后推迟月的个数
     * @return
     */
    public static Date getFirstDayOfNextMonth(int month){
     Calendar c = Calendar.getInstance();
     c.set(Calendar.MONTH, c.get(Calendar.MONTH)+month);
     c.set(Calendar.DAY_OF_MONTH,1);
     c.set(Calendar.HOUR_OF_DAY,0);
     c.set(Calendar.MINUTE,0);
     c.set(Calendar.SECOND, 0);
     c.set(Calendar.MILLISECOND,0);
     return c.getTime();
    }
    /**
     * 获得当月凌晨0点0分0秒
     * @return
     */
    public static Date getMonthZero(){
        Calendar startTime = Calendar.getInstance();
        startTime.set(Calendar.DAY_OF_MONTH, 1);
        startTime.set(Calendar.HOUR_OF_DAY, 0);
        startTime.set(Calendar.MINUTE, 0);
        startTime.set(Calendar.SECOND, 0);
        startTime.set(Calendar.MILLISECOND,0);
        Date start = startTime.getTime();
        return start;
    }
    /**
     * 获得当月凌晨5点0分0秒
     * @return
     */
    public static Date getMonthFive(){
        Calendar startTime = Calendar.getInstance();
        startTime.set(Calendar.DAY_OF_MONTH, 1);
        startTime.set(Calendar.HOUR_OF_DAY, 5);
        startTime.set(Calendar.MINUTE, 0);
        startTime.set(Calendar.SECOND, 0);
        startTime.set(Calendar.MILLISECOND,0);
        Date start = startTime.getTime();
        return start;
    }
    /**
     * 获得当前月末最后倒数第三天
     * @return
     */
    public static Date getLastThree(){
        Calendar cale = Calendar.getInstance();   
        cale.add(Calendar.MONTH, 1); //设置为下个月1号
        cale.set(Calendar.DAY_OF_MONTH,-2);//设置为倒数第三天
        cale.set(Calendar.HOUR_OF_DAY, 0);
        cale.set(Calendar.MINUTE, 0);
        cale.set(Calendar.SECOND, 0);
        cale.set(Calendar.MILLISECOND,0);
        Date start = cale.getTime();
        return start;
    }
    /**
     * 
     * @return
     */
    public static Date getMonthLast(){
        Calendar cale = Calendar.getInstance();   
        cale.add(Calendar.MONTH, 1);
        cale.set(Calendar.DAY_OF_MONTH,0);//设置为1号,当前日期既为本月第一天 
        cale.set(Calendar.HOUR_OF_DAY, 0);
        cale.set(Calendar.MINUTE, 0);
        cale.set(Calendar.SECOND, 0);
        cale.set(Calendar.MILLISECOND,0);
        Date start =cale.getTime();
        return start;
    }
    /**
     * //获取当前月最后一天的最后一秒
     * @return
     */
    public static Date getMonthLastDay(){
        Calendar   calEnd=Calendar.getInstance();//获取当前日期 
        calEnd.add(Calendar.MONTH, 1);
        calEnd.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天 
        calEnd.set(Calendar.HOUR_OF_DAY, 0);
        calEnd.set(Calendar.MINUTE, 0);
        calEnd.set(Calendar.SECOND, -1);
        Date endTime =calEnd.getTime();
        return endTime;
    }
    /**
     * 获得上月27号0时00分0秒
     * @return
     */
    public static Date getLastMonth27(){
     Calendar caleStart = Calendar.getInstance();
     caleStart.add(Calendar.MONTH, -1);
        caleStart.set(Calendar.DAY_OF_MONTH, 27);// 设置为27号,当前日期既为上月的27号
        caleStart.set(Calendar.HOUR_OF_DAY, 0);
        caleStart.set(Calendar.MINUTE, 0);
        caleStart.set(Calendar.SECOND, 0);
        return caleStart.getTime();
    }
    /**
     * 获得本月27号0时00分0秒
     * @return
     */
    public static Date getMonth27(){
        Calendar calEnd = Calendar.getInstance();// 获取当前日期
        calEnd.set(Calendar.DAY_OF_MONTH, 27);// 设置为27号,当前日期既为本月27号
        calEnd.set(Calendar.HOUR_OF_DAY, 0);
        calEnd.set(Calendar.MINUTE, 0);
        calEnd.set(Calendar.SECOND, -1);

        return calEnd.getTime();
    }
    
    public static Date getUnicomSettleMentDayOfMonth(int month){
        Calendar c = Calendar.getInstance();
        c.set(Calendar.MONTH, c.get(Calendar.MONTH)+month-1);
        c.set(Calendar.DAY_OF_MONTH,27);
        c.set(Calendar.HOUR_OF_DAY,0);
        c.set(Calendar.MINUTE,0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND,0);
        return c.getTime();
    }
    public static Date getDateForInvalid(){
     Calendar c = Calendar.getInstance();
     int day =c.get(Calendar.DAY_OF_MONTH);
     if(day>=27){
      c.add(Calendar.MONTH, 1);
     }else{
      c.add(Calendar.MONTH, 0);
     }
     c.set(Calendar.DAY_OF_MONTH,27);
        c.set(Calendar.HOUR_OF_DAY,0);
        c.set(Calendar.MINUTE,0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND,0);
  return c.getTime();
    }
    public static Date getTodayStart(){
     Calendar c = Calendar.getInstance();
     c.set(Calendar.HOUR_OF_DAY,0);
        c.set(Calendar.MINUTE,0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND,0);
        return c.getTime();
    }
    public static Date getTodayEnd(){
     Calendar c = Calendar.getInstance();
     c.add(Calendar.DATE,1);
     c.set(Calendar.HOUR_OF_DAY,0);
        c.set(Calendar.MINUTE,0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND,0);
        return c.getTime();
    }
    /* 获得当前时间的一天之前 */
    public static Date getOneDayBefore(){
     Calendar c = Calendar.getInstance();
     c.add(Calendar.DATE,-1);
        return c.getTime();
    }
    /*
     * 获得月底最后一天最后一秒
     */
    public static Date getMonthEnd(){
     Calendar cal = Calendar.getInstance();
     cal.add(Calendar.MONTH, 1);
     cal.set(Calendar.DAY_OF_MONTH,1);
     cal.set(Calendar.HOUR_OF_DAY,0);
     cal.set(Calendar.MINUTE,0);
     cal.set(Calendar.SECOND, 0);
     cal.set(Calendar.MILLISECOND,-1);
     return cal.getTime();
    }
    /**
     * 日期加一天
     * @param day
     * @return
     */
    public static String getNextDay(String day){
     SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
     try {
   Date date = sdf.parse(day);
   Calendar cal =Calendar.getInstance();
   cal.setTime(date);
   cal.add(Calendar.DATE,1);
   date = cal.getTime();
   return sdf.format(date);
  } catch (ParseException e) {
   e.printStackTrace();
  }
     return "";
    }
    /**
     * 日期加一个月
     * @param day
     * @return
     */
    public static String getNextMonth(String day){
     SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
     try {
   Date date = sdf.parse(day);
   Calendar cal =Calendar.getInstance();
   cal.setTime(date);
   cal.add(Calendar.MONTH, 1);
   date = cal.getTime();
   return sdf.format(date);
  } catch (ParseException e) {
   e.printStackTrace();
  }
     return "";
    }
    /**
     * 比较两个时间点 是不是同一天
     * @param d1
     * @param d2
     * @return
     */
    public static boolean DateCompare(Date d1,Date d2){
     Calendar c1 =Calendar.getInstance();
     c1.setTime(d1);
     c1.set(Calendar.HOUR_OF_DAY,0);
     c1.set(Calendar.MINUTE,0);
     c1.set(Calendar.SECOND, 0);
     c1.set(Calendar.MILLISECOND,0);
     Calendar c2 =Calendar.getInstance();
     c2.setTime(d2);
     c2.set(Calendar.HOUR_OF_DAY,0);
     c2.set(Calendar.MINUTE,0);
     c2.set(Calendar.SECOND, 0);
     c2.set(Calendar.MILLISECOND,0);
     int result = c1.compareTo(c2);
     if(result==0){
      return true;
     }else{
      return false;
     }
    }
    /**
     * 根据月份获取月初时间
     * @param date
     * @return
     */
    public static String getStartTime(String time){
     SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
     try {
   Date date = sdf.parse(time);
   Calendar cal =Calendar.getInstance();
   cal.setTime(date);
   cal.set(Calendar.DAY_OF_MONTH,1);
   date = cal.getTime();
   return sdf.format(date);
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
     return "";
    }
    /**
     * 根据月份获取月底时间
     * @param date
     * @return
     */
    public static String getEndTime(String time){
     SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
     try {
   Date date = sdf.parse(time);
   Calendar cal =Calendar.getInstance();
   cal.setTime(date);
   cal.add(Calendar.MONTH, 1);
   cal.set(Calendar.DAY_OF_MONTH,0);
   date = cal.getTime();
   return sdf.format(date);
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
     return "";
    }
    /**
     * 获得当天时间的零晨
     * @return
     */
    public static Date getNowDayStart(){
     Calendar cal = Calendar.getInstance();
     cal.set(Calendar.HOUR_OF_DAY,0);
     cal.set(Calendar.MINUTE,0);
     cal.set(Calendar.SECOND, 0);
     cal.set(Calendar.MILLISECOND,0);
     return cal.getTime();
    }
    /**
     * 获得当天时间的最后一秒
     * @return
     */
    public static Date getNowDayEnd(){
     Calendar cal = Calendar.getInstance();
     cal.add(Calendar.DATE,1);
     cal.set(Calendar.HOUR_OF_DAY,0);
     cal.set(Calendar.MINUTE,0);
     cal.set(Calendar.SECOND, 0);
     cal.set(Calendar.MILLISECOND,-1);
     return cal.getTime();
    }
    /**
     * 获得当月1号时间
     * @param args
     */
    public static Date getMonthStart(){
  Calendar cal =Calendar.getInstance(); 
  cal.set(Calendar.DAY_OF_MONTH,1);
  cal.set(Calendar.HOUR_OF_DAY,0);
     cal.set(Calendar.MINUTE,0);
     cal.set(Calendar.SECOND, 0);
     cal.set(Calendar.MILLISECOND,0);
  return cal.getTime();
    }
    
    
    public static boolean monthCompare(Date date1,Date date2){
     Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
     calendar.setTime(date1);
     int m1 = calendar.get(Calendar.MONTH);
     int y1 = calendar.get(Calendar.YEAR);
     calendar.setTime(date2);
     int y2 = calendar.get(Calendar.YEAR);
     int m2 = calendar.get(Calendar.MONTH);
     if(y1>y2)
      return true;
     else if(y1==y2 && m1>m2)
      return true;
     else
      return false; 
    }
    
    /**
     * 取得当前时间戳(精确到秒)
     *
     * @return nowTimeStamp
     */
    public static String getNowTimeStamp() {
        long time = System.currentTimeMillis();
        String nowTimeStamp = String.valueOf(time / 1000);
        return nowTimeStamp;
    }
    
 public static String Date2TimeStamp(String dateStr, String format) {
  try {
   SimpleDateFormat sdf = new SimpleDateFormat(format);
   return String.valueOf(sdf.parse(dateStr).getTime() / 1000);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return "";
 }
    
    public static Date addMonths(final Date date, final int amount) {
        return add(date, Calendar.MONTH, amount);
    }
    
    private static Date add(final Date date, final int calendarField, final int amount) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        }
        final Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(calendarField, amount);
        return c.getTime();
    }
    
    public static String getTimeStrFormat(Date date) {
     return timeStrFormat.format(date);
    }

    public static void main(String[] args){
     //System.out.println(getInternalTimeByMonth(6,DateUtils.TIMEF_FORMAT));
     //System.out.println(getInternalTimeByYm(7,5,DateUtils.TIMEF_FORMAT));
     String date = "2017-07-17 11:03:52";
        System.out.println("compareToBefore1 : "+date.compareTo("2017-09-16 11:03:52"));
        System.out.println("compareToBefore2 : "+date.compareTo("2017-05-16 11:03:52"));
        System.out.println("compareToNow1 : "+date.compareTo("2017-07-17 11:03:52"));
        System.out.println("compareToNow2 : "+date.compareTo("2017-07-17"));
        System.out.println("compareToAfter1 : "+date.compareTo("2017-07-18 11:03:52"));
        System.out.println("compareToAfter2 : "+date.compareTo("2017-09-16 11:03:52"));
        System.out.println(getToday(TIMEF_FORMAT));
        String date1="2017-07-09 11:12:56";
        System.out.println(getDiffersDays(date1,date));
        System.out.println(getCurMin());
        //返回当前时间的小时
        System.out.println(getHour(new Date()));
        if(getHour(new Date())>=8 && getHour(new Date())<18) {
         System.out.println(true);
        }else {
         System.out.println(false);
        }
        
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值