日期工具類DateUtils

常用方法

獲取當前日期時間

getYear :獲取任意時間的年
getMonth :獲取任意時間的月
getDay :獲取任意時間的天
getHour :獲取任意時間的小時,12 小時制
getHour2 :獲取任意時間的小時,24 小時制
getMinute :獲取任意時間的分鐘
getSecond :獲取任意時間的秒
getBeforeDate :獲取前一天日期
getTomorrowDate ;獲取明天的日期

getNowString : 獲取當前日期 String 類型,默認返回格式2019-05-17 18:48:24,可自定義返回樣式
getNowDate :獲取當前日期 Date 類型
getNowMills :獲取當前時間的時間戳(毫秒)
getNowY :獲取當前年
getNowMonth :獲取當前月
getNowDay :獲取當前日
getNowWeek :獲取當前日期是該周的第幾天,周日是第一天返回 1,周六最后一天返回 7
getNowHour :獲取當前日期的小時
getNowMinute :獲取當前日期的分
getNowSecond :獲取當前日期的秒
getDaysOfMonth :根據傳入的年份和月份,判斷當前月有多少天
getLastDaysOfMonth 根據傳入的年份和月份,獲取上一個月有多少天

判斷相關

isLeapYear :是否是閏年
isTomorrow :是否是明天
isSameDay :判斷兩個時間是否是同一天
isSameWeekDates :判斷兩個時間是否在同一周
isSameDay :檢查兩個Calendar對象是否是同一天
checkIsActiveDate :判斷是否是有效日期
dateCompare :比較兩個日期大小
checkDateCompare :判斷前后日期對比
checkDateFromTo :日期比較, 后面日期比前面的日期大

格式轉換相關

string2Millis:

  1. 完整的時間使用 string2Millis("2019-05-17 18:34:16") 結果--->1558089256000
  2. 不完整時間使用 string2Millis("2019-05-17",PATTEN_YMD) 結果--->1558022400000(相當于2019-05-17 00:00:00)
    string2Millis :String 轉時間戳(13 位,毫秒)
    millis2String :時間戳轉 String 類型

string2Date :String 類型轉 Date
date2String :Date 類型轉 String
millis2Date :毫秒時間戳轉 Date
date2Millis :Date 轉時間戳

calendar2Date :將Calendar對象轉換為Date對象
date2Calendar :將Date對象轉換為Calendar對象

其他

getTimeSpan :獲取兩個時間的時間差( 例如比較相差多少秒: getTimeSpan("2019-05-17 18:34:16","2019-05-17 18:35:16",SEC) 結果--> -60)
getFitTimeSpan :獲取兩個時間的時間差,可返回相差天數,小時,分鐘等
getTimeSpanByNow :獲取時間和當前日期的差值
getFriendlyTimeSpanByNow :獲取時間與當前時間的時間差
getChineseWeek :獲取漢語星期幾
getUSWeek :獲取英文的星期
getChineseZodiac :獲取生肖
getZodiac :獲取星座
getWeekFormDate :獲得一個日期所在的周的星期幾的日期,如要找出2002年2月3日所在周的星期一是幾號

getEDate :返回美國時間格式 26 Apr 2006
getEndDateOfMonth :獲取一個月的最后一天
getNextDay :得到一個時間延后或前移幾天的時間
getPreTime :時間前推或后推分鐘
getUserDate :返回想要的時間樣式
getCalendar :獲取 Calendar
computerDuration :計算時長
between :判斷srcDate時間是否在startDate和endDate之間

addYears :在date時間基礎上增加amount年,原date不變,獲取后幾年或前幾年日期
addMonth :日期加月
addDay :日期加日,得到新日期
addHour :日期加小時
addMinute :日期加分鐘
addSecond :日期加秒

setYears :對date對象的年份字段設置value值,返回一個新的date對象,原date不變
setMonths :對date對象的月字段設置value值,返回一個新的date對象,原date不變
setDay :對date對象的天字段設置value值,返回一個新的date對象,原date不變
setHours :對date對象的小時字段設置value值,返回一個新的date對象,原date不變
setMinute :對date對象的分鐘字段設置value值,返回一個新的date對象,原date不變
setSecond ;對date對象的秒字段設置value值,返回一個新的date對象,原date不變

thirtyDaysBeforeSpecifiedDate :獲取指定日期的前30天的日期
thirtyDaysBeforeNow :獲取當前日期前30天的日期
getBeforeMonth :獲取當前時間的上一個月的年月
getLastDayOfMonth :返回某月的最后一天
getFirstDayOfMonth ;返回某月的第一天
getThisMonthLastDay :獲取本月最后一天
getThisMonthFirstDay ;獲取本月第一天
getNextWeekMonday :獲取下周一日期
secondToTime :時間戳秒,返回日時分秒

dayDiff :計算兩個日期之間間隔天數
daysBetween :計算兩個日期之間間隔天數
getThisWeekMonday0 :本周一凌晨
getThisWeekMonday :本周一
geLastWeekMonday :上周一
getFirstTime :獲取當天的最早時間00:00:00
getLatestTime :獲取當天的最晚時間23:59:59
getTomorrowEnding :獲得明日23點59分59秒的時間戳
getTomorrowMorning :獲得明日0點0分0秒的時間戳


/**
 * @author kiwilss
 */
public class DateUtils {

    //毫秒
    public static final int MSEC = 1;
    //秒
    public static final int SEC = 1000;
    //分
    public static final int MIN = 60000;
    //時
    public static final int HOUR = 3600000;
    //天
    public static final int DAY = 86400000;
    /**
     * 默認格式
     */
    private static final DateFormat DEFAULT_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 日期時間 格式yyyy-MM-dd HH:mm:ss
     */
    public static String PATTEN_YMDSFM = "yyyy-MM-dd HH:mm:ss";

    public static String PATTEN_YMDSF = "yyyy-MM-dd HH:mm";
    public static String PATTEN_YMDS = "yyyy-MM-dd HH";
    /**
     * 日期格式yyyy-MM-dd
     */
    public static String PATTEN_YMD = "yyyy-MM-dd";
    /**
     * 日期格式yyyy年MM月dd日
     */
    public static String PATTEN_YMD_CN = "yyyy年MM月dd日";

    /**
     * 日期格式 時分秒
     */
    public static final String PATTEN_HFM = "HH:mm:ss";
    /**
     * 日期格式 時
     */
    public static final String PATTEN_H = "HH";
    /**
     * 日期格式 分
     */
    public static final String PATTEN_M = "mm";

    private static final String[] CHINESE_ZODIAC =
            {"猴", "雞", "狗", "豬", "鼠", "牛", "虎", "兔", "龍", "蛇", "馬", "羊"};
    private static final String[] ZODIAC = {
            "水瓶座", "雙魚座", "白羊座", "金牛座", "雙子座", "巨蟹座",
            "獅子座", "處女座", "天秤座", "天蝎座", "射手座", "魔羯座"
    };
    private static final int[] ZODIAC_FLAGS = {20, 19, 21, 21, 21, 22, 23, 23, 23, 24, 23, 22};

    /**
     * 默認的日期間隔符
     */
    public static String       DEFAULT_SEPERATOR     = "-";
    /**
     * 日期驗證復雜正則
     */
    public static String       DATE_REG              = "([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-9])))";

    /**
     * 日期驗證簡單正則
     */
    private static String      DATE_REG_SIMPLE       = "^\\d{4}-\\d{2}-\\d{2}$";
    /**
     * 大于等于
     */
    public static final String COMPARE_TYPE_GTE      = "GTE";
    /**
     * 大于
     */
    public static final String COMPARE_TYPE_GT       = "GT";


    public static void main(String[] args) {
        System.out.println(secondToTime(120));

        System.out.println(date2String(setMonths(getNowDate(),5)));
        System.out.println(addMonth("2019-05-22",PATTEN_YMD,5));

        System.out.println(getBeforeDate(PATTEN_YMD));
        System.out.println(getTomorrowDate(PATTEN_YMD));

        System.out.println(addYears(getNowDate(),3));

        System.out.println(isTomorrow("2019-05-22 23:34:16"));
        System.out.println(isTomorrow("2019-05-23 23:34:16"));

        System.out.println(isSameDay("2019-05-22 23:34:16","2019-05-22 11:34:16"));
        System.out.println(isSameDay("2019-05-22","2019-06-22",PATTEN_YMD));
        System.out.println(isSameDay(1558022400000L,1558101600000L));

        System.out.println(millis2String(1558022400000L));
        System.out.println(millis2String(1558022400000L,PATTEN_YMD));

        System.out.println(string2Millis("2019-05-22 23:34:16"));
        System.out.println(string2Millis("2019-05-22",PATTEN_YMD));

        System.out.println("------------------------------------");
        System.out.println(getYear("2019-05-22 23:34:16"));
        System.out.println(getYear("2019-05-22",PATTEN_YMD));

        System.out.println(getMonth("2019-05-22 23:34:16"));
        System.out.println(getMonth("2019-05-22", PATTEN_YMD));

        System.out.println(getDay("2019-05-22 23:34:16"));
        System.out.println(getHour("2019-05-22 23:34:16"));
        System.out.println(getMinute("2019-05-22 23:34:16"));
        System.out.println(getSecond("2019-05-22 23:34:16"));

        System.out.println("------------------------------------");
        System.out.println(between("2019-05-22 23:34:16","2019-05-21 23:34:16","2019-05-24 23:34:16"));
        System.out.println(between("2019-05-22","2019-05-21","2019-05-24",PATTEN_YMD));

        System.out.println(computerDuration(120000));

        System.out.println(getUserDate(PATTEN_YMD));
        System.out.println(getUserDate(PATTEN_YMDSFM));
        System.out.println(getUserDate(PATTEN_YMDSF));
        System.out.println(getUserDate(PATTEN_H));


        System.out.println(getPreTime("2019-05-22 23:34:16", "20"));

        System.out.println(getNextDay("2019-05-22 23:34:16", "2"));
        System.out.println(getNextDay("2019-05-22 23:34:16", "12"));

        System.out.println(getEndDateOfMonth("2019-05-22 23:34:16"));
        System.out.println(getEndDateOfMonth("2019-05-22"));
        System.out.println(getEDate("2019-05-22"));

        System.out.println(isSameWeekDates("2019-05-22 23:34:16", "2019-05-23 23:34:16"));
        System.out.println(isSameWeekDates("2019-05-22 23:34:16", "2019-05-28 23:34:16"));
        System.out.println(isSameWeekDates("2019-05-22", PATTEN_YMD, "2019-05-28", PATTEN_YMD));

        System.out.println(getSeqWeek("2019-01-10 23:34:16"));

        System.out.println(getWeekFormDate("2019-05-17 23:34:16", 2));
        System.out.println(getWeekFormDate("2019-05-17", PATTEN_YMD, 2));
        System.out.println(getWeekFormDate("2019-05-17", PATTEN_YMD, 2, PATTEN_YMD));

        System.out.println(getUSWeek(getNowDate()));
        //獲取星期幾
        System.out.println(getChineseWeek(getNowDate()));
        //獲取星期幾,沒有時分秒,時間和后面的格式要對應
        System.out.println(getChineseWeek("2019-05-17", PATTEN_YMD));
        //與當前時間的時間差
        System.out.println(getTimeSpanByNow("2019-05-18 23:34:16", HOUR));//---->24
        System.out.println(getTimeSpanByNow("2019-05-18 23:34:16", DAY));//---->1(超過 24 小時算 1 天)
        System.out.println(getTimeSpanByNow("2019-05-18", PATTEN_YMD, DAY));//----->1

        //比較兩個時間差
        System.out.println("fit time span-->" + getFitTimeSpan("2019-05-17 18:34:16", "2019-05-10 18:35:16", 5));
        System.out.println(getFitTimeSpan("2019-05-17 18:34:16", "2019-05-10 18:35:16", DEFAULT_FORMAT, 1));

        System.out.println(getTimeSpan("2019-05-17 18:34:16", "2019-05-10 18:35:16", DAY));
        System.out.println(getTimeSpan("2019-05-17", "2019-05-10", PATTEN_YMD, DAY));

        //millis-11位,秒;13 位,毫秒-->string
        //string--->millis     結果--->1558089256000
        System.out.println(string2Millis("2019-05-17 18:34:16"));
        //沒有時分秒,后面的類型要對應,結果--->  1558022400000(相當于2019-05-17 00:00:00)
        System.out.println(string2Millis("2019-05-17", PATTEN_YMD));

        //string ----> date
        System.out.println(string2Date("2019-05-17 18:34:16"));
        //轉換后默認時分秒是00:00:00
        System.out.println(string2Date("2019-05-17 18:34:16", PATTEN_YMD));
        System.out.println(string2Date("2019-05-17", PATTEN_YMD));

        //date ---> string  年月日時分秒
        System.out.println(date2String(new Date()));
        //date ---> string  年月日
        System.out.println(date2String(new Date(), PATTEN_YMD));

        //獲取當前的時間
        System.out.println("當前日期--->" + getNowString());
        System.out.println(getNowString(PATTEN_YMD));
        System.out.println(getNowString(PATTEN_YMD_CN));

        //獲取當前的時分秒
        System.out.println(getNowString(PATTEN_HFM));
        //獲取檔期的小時
        System.out.println(getNowString(PATTEN_H));
        //獲取當前分鐘
        System.out.println(getNowString(PATTEN_M));

        //獲取當前年,月,日,星期,小時,分鐘,秒
        System.out.println(getNowY() + "年---" + getNowMonth() + "月--" + getNowDay() + "日--周" + getNowWeek() + "---"
                + getNowHour() + "時--" + getNowMinute() + "分---" + getNowSecond() + "秒");

        System.out.println(getLastDaysOfMonth(2019, 5));
    }


    /**
     * 獲得明日0點0分0秒的時間戳
     *
     * @author xuxiaowen
     * @date 2019/03/29
     * @return
     */
    public static int getTomorrowMorning() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_MONTH, 1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return (int) (cal.getTimeInMillis() / 1000);

    }

    /**
     * 獲得明日23點59分59秒的時間戳
     *
     * @return
     */
    public static int getTomorrowEnding() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_MONTH, 1);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.MILLISECOND, 0);
        return (int) (cal.getTimeInMillis() / 1000);
    }

    /**
     *
     * 獲取當天的最晚時間23:59:59
     *
     * @author zsl-2017年4月28日
     *
     * @param date
     *            日期
     * @param //pattern
     *            格式
     * @return
     */
    public static Date getLatestTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        return calendar.getTime();
    }

    /**
     *
     * 獲取當天的最早時間00:00:00
     *
     * @author zsl-2017年4月28日
     *
     * @param date
     *            日期
     * @param //pattern
     *            格式
     * @return
     */
    public static Date getFirstTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 00);
        calendar.set(Calendar.MINUTE, 00);
        calendar.set(Calendar.SECOND, 00);
        return calendar.getTime();
    }

    /**
     *
     * @author:nicholas
     * @date:2018年1月6日下午4:33:43
     * @desc:上周一
     * @param date
     * @return
     */
    public static Date geLastWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getThisWeekMonday(date));
        cal.add(Calendar.DATE, -7);
        return cal.getTime();
    }

    /**
     *
     * @author:nicholas
     * @date:2018年1月6日下午4:33:43
     * @desc:本周一
     * @param date
     * @return
     */
    public static Date getThisWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        // 獲得當前日期是一個星期的第幾天
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        // 設置一個星期的第一天,按中國的習慣一個星期的第一天是星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 獲得當前日期是一個星期的第幾天
        int day = cal.get(Calendar.DAY_OF_WEEK);
        // 根據日歷的規則,給當前日期減去星期幾與一個星期第一天的差值
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
        return cal.getTime();
    }

    /**
     * 本周一凌晨
     *
     * @author zsl-2019年4月8日
     * @return
     */
    public static Date getThisWeekMonday0(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        // 獲得當前日期是一個星期的第幾天
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        // 設置一個星期的第一天,按中國的習慣一個星期的第一天是星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 獲得當前日期是一個星期的第幾天
        int day = cal.get(Calendar.DAY_OF_WEEK);
        // 根據日歷的規則,給當前日期減去星期幾與一個星期第一天的差值
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
        return cal.getTime();
    }

    /**
     * 計算兩個日期之間間隔天數
     *
     * @author xuxiaowen
     * @date 2018/8/30
     * @param startTime
     * @param endTime
     * @return
     * @throws ParseException
     */
    public static int daysBetween(Date startTime, Date endTime) {
        try {
            Calendar cal = Calendar.getInstance();
            cal.setTime(startTime);
            long time1 = cal.getTimeInMillis();
            cal.setTime(endTime);
            long time2 = cal.getTimeInMillis();
            long between_days = (time2 - time1) / (1000 * 3600 * 24);
            return Integer.parseInt(String.valueOf(between_days));
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 計算兩個日期之間間隔天數
     *
     * @author xuxiaowen
     * @date 2018/8/30
     *
     * @param startTimeStr
     * @param endTimeStr
     * @param format
     * @return
     */
    public static long dayDiff(String startTimeStr, String endTimeStr, String format) {
        SimpleDateFormat formater = new SimpleDateFormat(format);
        long diff = 0L;
        try {
            long startTime = formater.parse(startTimeStr).getTime();
            long endTime = formater.parse(endTimeStr).getTime();
            diff = (endTime - startTime) / (1000 * 60 * 60 * 24);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return diff;
    }

    /**
     * 返回日時分秒
     *
     * @author:nicholas
     * @date:2018年9月29日上午11:02:02
     * @desc:
     * @param second
     * @return
     */
    public static String secondToTime(long second) {//時間戳是秒
        long days = second / 86400;// 轉換天數
        second = second % 86400;// 剩余秒數
        long hours = second / 3600;// 轉換小時數
        second = second % 3600;// 剩余秒數
        long minutes = second / 60;// 轉換分鐘
        second = second % 60;// 剩余秒數
        if (0 < days) {
            return days + " " + hours + ":" + minutes + ":" + second;
        } else {
            return hours + ":" + minutes + ":" + second;
        }
    }



    /**
     *
     * @author:nicholas
     * @date:2018年1月6日下午4:33:43
     * @desc:下周一
     * @param date
     * @return
     */
    public static Date getNextWeekMonday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getThisWeekMonday(date));
        cal.add(Calendar.DATE, 7);
        return cal.getTime();
    }

    /**
     *
     * @author:nicholas
     * @date:2018年1月8日下午3:18:57
     * @desc:獲取本月第一天
     * @return
     */
    public static Date getThisMonthFirstDay() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        // 獲取當前月第一天:
        Calendar c = Calendar.getInstance();
        c.add(Calendar.MONTH, 0);
        c.set(Calendar.DAY_OF_MONTH, 1);// 設置為1號,當前日期既為本月第一天
        String first = format.format(c.getTime());

        format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Date firstDay = null;
        try {
            first = first + " 00:00:00";
            firstDay = format.parse(first);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return firstDay;
    }

    /**
     * 獲取本月最后一天
     *
     * @author zsl-2019年4月2日
     * @return
     */
    public static Date getThisMonthLastDay() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        // 獲取當前月最后一天:
        Calendar c = Calendar.getInstance();
        c.add(Calendar.MONTH, 0);
        c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
        String first = format.format(c.getTime());

        format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Date firstDay = null;
        try {
            first = first + " 23:59:59";
            firstDay = format.parse(first);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return firstDay;
    }


    /**???
     * 獲取當前日期最后時間-到秒結束
     *
     * @author xuxiaowen
     * @date 2018/8/17
     *
     * @param date
     * @return
     */
    public static Date initEndTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    public static Date initializeEndTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTime();
    }

    public static Date initializeEndSecond(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 日期比較, 后面日期比前面的日期大
     *
     * @param dateFrom
     *            開始日期
     * @param dateEnd
     *            結束日期
     * @return boolean 比較結果
     */
    public static boolean checkDateFromTo(String dateFrom, String dateEnd) {
        if (checkDateCompare(dateFrom, dateEnd, COMPARE_TYPE_GTE)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 判斷前后日期對比。 如果后面的日期大于前面的日期, 返回true。 否則返回false。
     *
     * @param dateFromStr
     *            開始日期
     * @param dateEndStr
     *            結束日期
     * @return boolean 比較結果
     */
    private static boolean checkDateCompare(String dateFromStr, String dateEndStr, String compareType) {
        if (!checkIsActiveDate(dateFromStr) || !checkIsActiveDate(dateEndStr)) {
            return false;
        } else {
            Date dateFrom = string2Date(dateFromStr, PATTEN_YMD);
            Date dateEnd = string2Date(dateEndStr, PATTEN_YMD);

            if (COMPARE_TYPE_GT.equals(compareType)) {
                // 大于
                if (dateFrom.before(dateEnd)) {
                    return true;
                }
            } else if (COMPARE_TYPE_GTE.equals(compareType)) {
                // 大于等于
                if (!dateEnd.before(dateFrom)) {
                    return true;
                }
            } else if (COMPARE_TYPE_GTE.equals(compareType)) {
                // 不等于
                if (!isEqual(dateFromStr, dateEndStr)) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * 比較兩個日期大小
     *
     * @param startDate
     *            開始日期
     * @param endDate
     *            結束日期
     * @return 開始日期早于結束日期,返回true。否則返回false。相等,返回false
     */
    public static boolean dateCompare(Date startDate, Date endDate) {
        if (startDate.before(endDate)) {
            return true;
        }
        return false;
    }

    /**
     * 判斷是否是有效日期
     *
     * @param date
     *            判斷日期
     * @return 是否有效日期
     */
    public static boolean checkIsActiveDate(String date) {
        // 先驗證基本格式是否正確
        if (!matches(date, DATE_REG_SIMPLE)) {
            return false;
        }
        // 驗證復雜格式是否正確
        if (isNotEmpty(date) && date.contains(DEFAULT_SEPERATOR)) {
            String dateNoSeprator = date.replaceAll(DEFAULT_SEPERATOR, "");
            return matches(dateNoSeprator, DATE_REG);
        }
        return false;
    }


    /**
     * 判斷兩個String 是否相等, 如果都是null 也表示相等
     *
     * @param s1
     * @param s2
     * @return boolean
     */
    public static boolean isEqual(String s1, String s2) {
        if (s1 == null) {
            s1 = "";
        }
        if (s2 == null) {
            s2 = "";
        }
        return (s1.equals(s2));
    }

    /**
     * 判斷是否不為空,不空返回true
     *
     * @param str
     * @return boolean
     */
    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }
    /**
     * 正則表達式匹配<br>
     *
     * @param value
     * @param regexp
     * @return boolean
     */
    public static boolean matches(String value, String regexp) {
        if (isEmpty(value) || isEmpty(regexp)) {
            return false;
        } else {
            return value.matches(regexp);
        }
    }
    /**
     * 判斷是否為空
     *
     * @param str
     * @return boolean
     */
    public static boolean isEmpty(String str) {
        if ("".equals(nvl(str))) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 處理String null 如果是null 返回空字符串,否則返回trim后的String
     *
     * @param value
     * @return String
     */
    public static String nvl(String value) {
        if (value == null) {
            return "";
        } else {
            return value.trim();
        }
    }
    /**
     * 返回某月的第一天
     *
     * @param year
     *            年
     * @param month
     *            月
     * @return 某月的第一天
     */
    public static Date getFirstDayOfMonth(String year, String month) {
        // 驗證空
        if (isEmpty(year) || isEmpty(month)) {
            return null;
        }
        // 驗證年
        if (!matches(year, "\\d{4}")) {
            return null;
        }
        // 驗證月
        int monthValue = Integer.parseInt(month);
        if (monthValue > 12 || monthValue < 1) {
            return null;
        }
        // 改成 yyyy-MM-dd格式
        StringBuilder sb = new StringBuilder();
        sb.append(year);
        sb.append(DEFAULT_SEPERATOR);
        sb.append(month);
        sb.append(DEFAULT_SEPERATOR);
        sb.append("01");
        return string2Date(sb.toString(), PATTEN_YMD);
    }

    /**
     * 返回某月的最后一天
     *
     * @param year
     *            年
     * @param month
     *            月
     * @return 某月的最后一天
     */
    public static Date getLastDayOfMonth(String year, String month) {
        // 驗證空
        if (isEmpty(year) || isEmpty(month)) {
            return null;
        }
        // 驗證年
        if (!matches(year, "\\d{4}")) {
            return null;
        }
        // 驗證月
        int monthValue = Integer.parseInt(month);
        if (monthValue > 12 || monthValue < 1) {
            return null;
        }
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, Integer.parseInt(year));
        cal.set(Calendar.MONTH, monthValue - 1);
        cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        return cal.getTime();
    }

    /**
     * 獲取當前時間的上一個月的年月
     *
     * @param date
     * @param pattern
     * @return
     */
    public static String getBeforeMonth(Date date, String pattern) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, -1);
        return date2String(cal.getTime(), pattern);
    }

    /**
     * 獲取當前日期前30天的日期
     *
     * @param fm
     *            日期格式
     * @return 當前日期前三十天的日期
     * @throws //SystemException
     *             轉換異常,拋出系統異常
     */
    public static String thirtyDaysBeforeNow(String fm) {
        String result;
        Calendar date = Calendar.getInstance();
        date.add(Calendar.DAY_OF_MONTH, -30);
        Format format = new SimpleDateFormat(fm);
        result = format.format(date.getTime());
        return result;
    }

    /**
     * 獲取指定日期的前30天的日期
     *
     * @param startDate
     *            指定日期
     * @param fm
     *            格式
     * @return 指定日期前30天的日期
     * @throws //SystemException
     *             轉換異常,拋出系統異常
     */
    public static String thirtyDaysBeforeSpecifiedDate(Date startDate, String fm) {
        String result;
        Calendar date = Calendar.getInstance();
        date.setTime(startDate);
        date.add(Calendar.DAY_OF_MONTH, -30);
        Format format = new SimpleDateFormat(fm);
        result = format.format(date.getTime());
        return result;
    }

    /**
     * 獲取前一天日期
     * @para
     * @return 前一天 日期
     * @throws //SystemException
     *             轉換異常,拋出系統異常
     */
    public static String getBeforeDate(String patten) {
        String result;
        Calendar date = Calendar.getInstance();
        date.add(Calendar.DAY_OF_MONTH, -1);
        Format format = new SimpleDateFormat(patten);
        result = format.format(date.getTime());
        return result;
    }

    /**獲取明天的日期
     * @param patten
     * @return
     */
    public static String getTomorrowDate(String patten){
        String result;
        Calendar date = Calendar.getInstance();
        date.add(Calendar.DAY_OF_MONTH, 1);
        Format format = new SimpleDateFormat(patten);
        result = format.format(date.getTime());
        return result;
    }

    /**
     * 對date對象的年份字段設置value值,返回一個新的date對象,原date不變
     *
     * @param date  需要設置的date
     * @param value 需要設置的年份
     * @return 設置年份字段后返回的新的Date對象
     */
    private static Date setYears( Date date, int value) {
        return set(date, Calendar.YEAR, value);
    }

    /**
     * 對date對象的月字段設置value值,返回一個新的date對象,原date不變
     *
     * @param date  需要設置的date
     * @param value 需要設置的月
     * @return 設置月字段后返回的新的Date對象
     */
    private static Date setMonths(Date date, int value) {
        return set(date, Calendar.MONTH, value);
    }

    /**
     * 對date對象的天字段設置value值,返回一個新的date對象,原date不變
     *
     * @param date  需要設置的date
     * @param value 需要設置的天
     * @return 設置天字段后返回的新的Date對象
     */
    private static Date setDays( Date date, int value) {
        return set(date, Calendar.DAY_OF_MONTH, value);
    }

    /**
     * 對date對象的小時字段設置value值,返回一個新的date對象,原date不變
     *
     * @param date  需要設置的date
     * @param value 需要設置的小時
     * @return 設置小時字段后返回的新的Date對象
     */
    private static Date setHours( Date date, int value) {
        return set(date, Calendar.HOUR_OF_DAY, value);
    }

    /**
     * 對date對象的分鐘字段設置value值,返回一個新的date對象,原date不變
     *
     * @param date  需要設置的date
     * @param value 需要設置的分鐘
     * @return 設置分鐘字段后返回的新的Date對象
     */
    private static Date setMinutes( Date date, int value) {
        return set(date, Calendar.MINUTE, value);
    }

    /**
     * 對date對象的秒字段設置value值,返回一個新的date對象,原date不變
     *
     * @param date  需要設置的date
     * @param value 需要設置的秒值
     * @return 設置秒字段后返回的新的Date對象
     */
    private static Date setSeconds( Date date, int value) {
        return set(date, Calendar.SECOND, value);
    }

    /**
     * 對date對象的毫秒值字段設置value值,返回一個新的date對象,原date不變
     *
     * @param date  需要設置的date
     * @param value 需要設置的毫秒值
     * @return 設置毫秒值字段后返回的新的Date對象
     */
    private static Date setMilliseconds( Date date, int value) {
        return set(date, Calendar.MILLISECOND, value);
    }

    /**
     * 對date對象的calendarField字段設置value值,返回一個新的date對象,原date不變
     *
     * @param date          需要設置的date
     * @param calendarField Calendar字段
     * @param value         calendarField字段需要設置的值
     * @return 設置calendarField字段后返回的新的Date對象
     */
    private static Date set(Date date, int calendarField, int value) {
        if (null == date) {
            throw new IllegalArgumentException("The date must not be null");
        }
        Calendar calendar = getCalendar();
        calendar.setTime(date);
        calendar.set(calendarField, value);
        return calendar.getTime();
    }
    private static String set2(Date date, int calendarField, int value) {
        return date2String(set(date,calendarField,value));
    }


    /**
     * 在date時間基礎上增加amount年,原date不變
     *
     * @param date   需要增加amount年的date時間
     * @param amount 增加amount年
     * @return 增加amount年后的date時間
     */
    public static Date addYears(Date date, int amount) {
        return add(date, amount);
    }

    public static String addYears(String time, int amount){//默認時間格式
        Date date = addYears(string2Date(time), amount);
        return date2String(date);
    }
    public static String addYears(String time, String patten, int amount){//自定義時間格式
        Date date = addYears(string2Date(time,patten), amount);
        return date2String(date);
    }
        /**
     * 增加date,返回一個新的date對象,原date不變
     *
     * @param date          需要增加的date
     * @param amount        增加的總數,可以是負的
     * @return 增加后的新的date對象
     */
    private static Date add(Date date, int amount) {
        if (null == date) {
            throw new IllegalArgumentException("The date must not be null");
        }
        Calendar calendar = getCalendar();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, amount);
        return calendar.getTime();
    }

    /**
     * 日期加月
     *
     * @param date
     *            日期
     * @param spans
     *            增加數量
     * @return 加月后的日期
     */
    public static Date addMonth(Date date, int spans) {
        return addDate(date, Calendar.MONTH, spans);
    }

    public static String addMonth(String time,int spans){//默認時間格式
        return date2String(addMonth(string2Date(time),spans));
    }
    public static String addMonth(String time, String patten, int spans){//自定義樣式,返回樣式相同
        return date2String(addMonth(string2Date(time,patten),spans),patten);
    }

    /**
     * 日期加天
     *
     * @param date
     *            日期
     * @param spans
     *            增加數量
     * @return 加天后的日期
     */
    public static Date addDay(Date date, int spans) {
        return addDate(date, Calendar.DAY_OF_MONTH, spans);
    }

    public static String addDay(String time, int spans){//默認時間格式
        return date2String(addDay(string2Date(time),spans));
    }
    public static String addDay(String time, String patten, int spans){//自定義格式
        return date2String(addDay(string2Date(time, patten),spans), patten);
    }

    /**
     * 日期加小時
     *
     * @param date
     *            日期
     * @param spans
     *            增加數量
     * @return 加小時后的日期
     */
    public static Date addHour(Date date, int spans) {
        return addDate(date, Calendar.HOUR_OF_DAY, spans);
    }

    public static String addHour(String time, int spans){//默認格式
        return date2String(addHour(string2Date(time),spans));
    }

    public static String addHour(String time, String patten, int spans){//自定義格式
        return date2String(addHour(string2Date(time,patten),spans),patten);
    }

    /**
     * 日期加分鐘
     *
     * @param date
     *            日期
     * @param spans
     *            增加數量
     * @return 加分鐘后的日期
     */
    public static Date addMinute(Date date, int spans) {
        return addDate(date, Calendar.MINUTE, spans);
    }

    public static String addMinute(String time, int spans){//默認格式
        return date2String(addMinute(string2Date(time),spans));
    }

    public static String addMinute(String time, String patten, int spans){//自定義格式
        return date2String(addMinute(string2Date(time,patten),spans),patten);
    }

    /**
     * 日期加秒
     *
     * @param date
     *            日期
     * @param spans
     *            增加數量
     * @return 加秒后的日期
     */
    public static Date addSecond(Date date, int spans) {
        return addDate(date, Calendar.SECOND, spans);
    }
    /**
     * 日期加法計算
     *
     * @param date
     *            日期
     * @param type
     *            增加類型
     * @param spans
     *            增加數量
     * @return 加法計算后的日期
     */
    public static Date addDate(Date date, int type, int spans) {
        Calendar inputCalendar = Calendar.getInstance();
        inputCalendar.setTime(date);
        inputCalendar.add(type, spans);
        return inputCalendar.getTime();
    }
    /**
     * 判斷一個時間是不是明天
     * @param date 需要判斷的時間
     * @return true明天,false不是
     */
    public static boolean isTomorrow(Date date) {
        Calendar calendar1 = getCalendar();
        calendar1.setTime(date);

        Calendar calendar2 = getCalendar();
        calendar2.add(Calendar.DAY_OF_MONTH, 1);
        return isSameDay(calendar1, calendar2);
    }

    public static boolean isTomorrow(String time){
        return isTomorrow(string2Date(time));
    }
    public static boolean isTomorrow(String time, String patten){
        return isTomorrow(string2Date(time,patten));
    }
    public static boolean isTomorrow(long time){
        return isTomorrow(millis2Date(time));
    }

    /**獲取 Calendar
     * @return
     */
    public static Calendar getCalendar() {
        return Calendar.getInstance();
    }

    /**獲取任意時間的年
     * @param time
     * @return
     */
    public static int getYear(String time){//默認時間格式
        return getYear(string2Date(time));
    }
    //其他時間格式
    public static int getYear(String time, String patten){
        return getYear(string2Date(time,patten));
    }
    public static int getYear(long time){
        return getYear(millis2Date(time));
    }

    public static int getYear(Date date){
        Calendar calendar = getCalendar();
         calendar.setTime(date);
         return calendar.get(Calendar.YEAR) ;
    }

    /**獲取任意時間月份
     * @param
     * @return
     */
    public static int getMonth(String time){//默認時間格式
        return getMonth(string2Date(time));
    }

    public static int getMonth(String time, String patten){//任意時間格式
        return getMonth(string2Date(time,patten));
    }
    public static int getMonth(long time){
        return getMonth(millis2Date(time));
    }

    public static int getMonth(Date date){
        Calendar calendar = getCalendar();
        calendar.setTime(date);
        return calendar.get(Calendar.MONTH) + 1;
    }

    /**獲取任意時間的天
     * @param time
     * @return
     */
    public static int getDay(String time){//默認時間格式
        return getDay(string2Date(time));
    }
    public static int getDay(String time, String patten){//自定義時間格式
        return getDay(string2Date(time,patten));
    }
    public static int getDay(long time){//默認年月日時分秒
        return getDay(millis2Date(time));
    }

    public static int getDay(Date date){
        Calendar calendar = getCalendar();
        calendar.setTime(date);
        return calendar.get(Calendar.DATE);
    }

    /**獲取任意時間的小時,12 小時制
     * @param date
     * @return
     */
    public static int getHour(Date date){
        Calendar calendar = getCalendar();
        calendar.setTime(date);
        return calendar.get(Calendar.HOUR);
    }

    /**獲取任意時間的小時,24 小時制
     * @param date
     * @return
     */
    public static int getHour2(Date date){
        Calendar calendar = getCalendar();
        calendar.setTime(date);
        return calendar.get(Calendar.HOUR_OF_DAY);
    }

    /**獲取時間的小時,默認時間格式,默認是獲取 24 小時制
     * @param time
     * @return
     */
    public static int getHour(String time){
      return getHour(time,true);
    }

    /**獲取時間的小時,默認時間格式
     * @param time
     * @param is24
     * @return
     */
    public static int getHour(String time, boolean is24){
      return getHour(time,PATTEN_YMDSFM,is24);
    }

    /**獲取時間的小時,自定義時間格式,至少要到小時
     * @param time
     * @param patten
     * @param is24
     * @return
     */
    public static int getHour(String time, String patten, boolean is24){
        Date date = string2Date(time,patten);
        if (is24){
            return getHour2(date);
        }else {
            return getHour(date);
        }
    }

    public static int getHour(long time,boolean is24){
        if (is24){
            return getHour2(millis2Date(time));
        }else {
            return getHour(millis2Date(time));
        }
    }

    /**獲取日期的分鐘
     * @param date
     * @return
     */
    public static int getMinute(Date date){
        Calendar calendar = getCalendar();
        calendar.setTime(date);
        return calendar.get(Calendar.MINUTE);
    }

    /**獲取時間的分鐘,默認時間格式
     * @param time
     * @return
     */
    public static int getMinute(String time){
        return getMinute(string2Date(time));
    }

    public static int getMinute(long time){
        return getMinute(millis2Date(time));
    }

    /**獲取日期的秒
     * @param date
     * @return
     */
    public static int getSecond(Date date){
        Calendar calendar = getCalendar();
        calendar.setTime(date);
        return calendar.get(Calendar.SECOND);
    }
    public static int getSecond(String time){
        return getSecond(string2Date(time));
    }
    public static int getSecond(long time){
        return getSecond(millis2Date(time));
    }

    /**
     * 檢查兩個Calendar對象是否是同一天,忽略時間
     *
     * @param calendar1 first Calendar
     * @param calendar2 second Calendar
     * @return true:同一天,false不是同一天
     */
    public static boolean isSameDay( Calendar calendar1,  Calendar calendar2) {
        if (null == calendar1 || null == calendar2) {
            throw new IllegalArgumentException("The date must not be null");
        }
        return calendar1.get(Calendar.ERA) == calendar2.get(Calendar.ERA) &&
                calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR) &&
                calendar1.get(Calendar.DAY_OF_YEAR) == calendar2.get(Calendar.DAY_OF_YEAR);
    }

        /**
     * 檢查兩個Date對象是否是同一天
     *
     * @param date1 first Date
     * @param date2 second Date
     * @return true:同一天,false不是同一天
     */
    public static boolean isSameDay(Date date1, Date date2) {
        if (null == date1 || null == date2) {
            throw new IllegalArgumentException("The date must not be null");
        }
        Calendar calendar1 = getCalendar();
        calendar1.setTime(date1);

        Calendar calendar2 = getCalendar();
        calendar2.setTime(date2);

        return isSameDay(calendar1, calendar2);
    }

    public static boolean isSameDay(String time1, String time2){//默認時間格式
        return isSameDay(string2Date(time1),string2Date(time2));
    }

    public static boolean isSameDay(String time1, String time2, String patten){//自定義時間格式
        return isSameDay(string2Date(time1,patten),string2Date(time2,patten));
    }

    public static boolean isSameDay(long time1,long time2){
        return isSameDay(millis2Date(time1),millis2Date(time2));
    }


    /**
     * 判斷srcDate時間是否在startDate和endDate之間
     *
     * @param srcDate   需要判斷的時間
     * @param startDate 開始時間
     * @param endDate   結束時間
     * @return true:srcDate時間在startDate和endDate之間,false:srcDate時間不在startDate和endDate之間
     */
    public static boolean between(Date srcDate,  Date startDate, Date endDate) {
        if (startDate.after(srcDate)) {
            return false;
        } else if (endDate.before(srcDate)) {
            return false;
        }
        return true;
    }

    public static boolean between(String srcDate,  String startDate, String endDate) {//三個時間,都是默認時間格式
        Date src = string2Date(srcDate);
        Date start = string2Date(startDate);
        Date end = string2Date(endDate);
        if (start.after(src)) {
            return false;
        } else if (end.before(src)) {
            return false;
        }
        return true;
    }

    public static boolean between(String srcDate,  String startDate, String endDate,String patten) {//三個時間時間格式要一樣
        Date src = string2Date(srcDate,patten);
        Date start = string2Date(startDate,patten);
        Date end = string2Date(endDate,patten);
        if (start.after(src)) {
            return false;
        } else if (end.before(src)) {
            return false;
        }
        return true;
    }

        /**
     * 將Calendar對象轉換為Date對象
     *
     * @param calendar 需要轉換的Calendar對象
     * @return 轉換后的Date對象
     */
    public static Date calendar2Date(Calendar calendar) {
        return calendar.getTime();
    }

    /**
     * //     * 將Date對象轉換為Calendar對象
     * //     *
     * //     * @param date     需要轉換的Date對象
     * //     * @param timeZone 時區
     * //     * @return 轉換后的Calendar對象
     * //
     */
    public static Calendar date2Calendar(Date date, TimeZone timeZone) {
        Calendar calendar;
        if (null == timeZone) {
            calendar = Calendar.getInstance();
        } else {
            calendar = Calendar.getInstance(timeZone);
        }
        calendar.setTime(date);
        return calendar;
    }

    public static Calendar date2Calendar(Date date) {
        return date2Calendar(date, null);
    }


    /**
     * 計算時長
     *
     * @param duration 時長毫秒值
     * @return 時長
     */
    public static String computerDuration(long duration) {
        if (0 > duration) {
            return "0";
        }
        duration /= 1000;
        long day = duration / (24 * 60 * 60);
        long hour = duration / (60 * 60) % 24;
        long minute = duration / 60 % 60;
        long second = duration % 60;
        StringBuilder sb = new StringBuilder();
        if (day >= 1) {
            sb.append(day).append("天");
        }
        if (hour >= 1) {
            sb.append(hour).append("小時");
        }
        if (minute >= 1) {
            sb.append(minute).append("分鐘");
        }
//        if (second >= 1) {
//            sb.append(second).append("秒");
//        }
        if (sb.length() <= 0) {
            sb.append("0分鐘");
        }
        return sb.toString();
    }





    /**
     * 根據用戶傳入的時間表示格式,
     * 返回當前時間的格式 如果是yyyyMMdd,注意字母y不能大寫。
     *
     * @param //yyyyMMddhhmmss
     * @return
     */

    public static String getUserDate(String patten) {//當前時間
        return getUserDate(getNowDate(), patten);
    }

    public static String getUserDate(Date time, String patten) {//任意時間
        SimpleDateFormat formatter = new SimpleDateFormat(patten);
        String dateString = formatter.format(time);
        return dateString;
    }

    public static String getUserDate(String time, String patten) {//任意時間,時間格式
        SimpleDateFormat formatter = new SimpleDateFormat(patten);
        return formatter.format(string2Date(time));
    }

    public static String getUserDate(long time, String patten) {//任意時間,時間格式
        SimpleDateFormat format = getDateParser(patten);
        return format.format(millis2Date(time));
    }

    /**
     * 時間前推或后推分鐘,其中JJ表示分鐘.
     */
    public static String getPreTime(String time, String jj) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String mydate1 = "";
        try {
            Date date1 = format.parse(time);
            long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60;
            date1.setTime(Time * 1000);
            mydate1 = format.format(date1);
        } catch (Exception e) {

        }
        return mydate1;
    }

    public static String getPreTime(String time, int jj) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String mydate1 = "";
        try {
            Date date1 = format.parse(time);
            long Time = (date1.getTime() / 1000) + jj * 60;
            date1.setTime(Time * 1000);
            mydate1 = format.format(date1);
        } catch (Exception e) {

        }
        return mydate1;
    }

    public static String getPreTime(Date time, int jj) {
        return getPreTime(date2String(time), jj);
    }

    public static String getPreTime(long time, int jj) {
        return getPreTime(millis2String(time), jj);
    }

    /**
     * 得到一個時間延后或前移幾天的時間,nowdate為時間,delay為前移或后延的天數
     */
    public static String getNextDay(String nowdate, String delay) {//默認時間格式
        return getNextDay(nowdate, PATTEN_YMDSFM, delay);
    }

    public static String getNextDay(String nowdate, int delay) {//yyyy-MM-dd時間格式
        return getNextDay(nowdate, PATTEN_YMD, delay);
    }

    public static String getNextDay(Date date, int delay) {
        return getNextDay(date2String(date), PATTEN_YMDSFM, delay);
    }

    public static String getNextDay(long date, int delay) {
        return getNextDay(millis2String(date), PATTEN_YMDSFM, delay);
    }

    public static String getNextDay(String nowdate, String patten, String delay) {
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            String mdate = "";
            Date d = string2Date(nowdate, patten);
            assert d != null;
            long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;
            d.setTime(myTime * 1000);
            mdate = format.format(d);
            return mdate;
        } catch (Exception e) {
            return "";
        }
    }

    public static String getNextDay(String nowdate, String patten, int delay) {
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            String mdate = "";
            Date d = string2Date(nowdate, patten);
            assert d != null;
            long myTime = (d.getTime() / 1000) + delay * 24 * 60 * 60;
            d.setTime(myTime * 1000);
            mdate = format.format(d);
            return mdate;
        } catch (Exception e) {
            return "";
        }
    }


    /**
     * 獲取一個月的最后一天
     *
     * @param dat
     * @return
     */
    public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd
        String str = dat.substring(0, 8);
        String month = dat.substring(5, 7);
        int mon = Integer.parseInt(month);
        if (mon == 1 || mon == 3 || mon == 5
                || mon == 7 || mon == 8 || mon == 10 || mon == 12) {
            str += "31";
        } else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
            str += "30";
        } else {
            if (isLeapYear(dat)) {
                str += "29";
            } else {
                str += "28";
            }
        }
        return str;
    }

    public static String getEndDateOfMonth(Date dat) {
        return getEndDateOfMonth(date2String(dat));
    }

    public static String getEndDateOfMonth(long dat) {
        return getEndDateOfMonth(millis2String(dat));
    }

    /**
     * 返回美國時間格式 26 Apr 2006
     *
     * @param str
     * @return
     */
    public static String getEDate(String str) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        ParsePosition pos = new ParsePosition(0);
        Date strtodate = formatter.parse(str, pos);
        String j = strtodate.toString();
        String[] k = j.split(" ");
        return k[2] + k[1].toUpperCase() + k[5].substring(2, 4);
    }


    /**
     * 判斷二個時間是否在同一個周
     *
     * @param date1
     * @param date2
     * @return
     */
    public static boolean isSameWeekDates(Date date1, Date date2) {
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        cal1.setTime(date1);
        cal2.setTime(date2);
        int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
        if (0 == subYear) {
            if (cal1.get(Calendar.WEEK_OF_YEAR) ==
                    cal2.get(Calendar.WEEK_OF_YEAR)) {
                return true;
            }
        } else if (1 == subYear && 11 ==
                cal2.get(Calendar.MONTH)) {
            // 如果12月的最后一周橫跨來年第一周的話則最后一周即算做來年的第一周
            if (cal1.get(Calendar.WEEK_OF_YEAR) ==
                    cal2.get(Calendar.WEEK_OF_YEAR)) {
                return true;
            }
        } else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
            if (cal1.get(Calendar.WEEK_OF_YEAR) ==
                    cal2.get(Calendar.WEEK_OF_YEAR)) {
                return true;
            }
        }
        return false;
    }

    public static boolean isSameWeekDates(String date1, String date2) {
        return isSameWeekDates(string2Date(date1), string2Date(date2));
    }

    /**
     * 判斷二個時間是否在同一個周,兩個時間類型可自定義
     */
    public static boolean isSameWeekDates(String date1, String patten1, String date2, String patten2) {
        return isSameWeekDates(string2Date(date1, patten1), string2Date(date2, patten2));
    }

    /**
     * 判斷二個時間是否在同一個周,兩個時間類型一樣
     */
    public static boolean isSameWeekDates(String date1, String date2, String patten) {
        return isSameWeekDates(string2Date(date1, patten), string2Date(date2, patten));
    }

    /**
     * 判斷二個時間是否在同一個周
     */
    public static boolean isSameWeekDates(long date1, long date2) {
        return isSameWeekDates(millis2Date(date1), millis2Date(date2));
    }

    /**
     * 根據日期,獲得是本年第幾周
     *
     * @return
     */
    public static int getSeqWeek(String time) {
        return getSeqWeek(time, PATTEN_YMDSFM);
    }

    public static int getSeqWeek() {//當前時間
        return getSeqWeek(getNowString(), PATTEN_YMDSFM);
    }

    public static int getSeqWeek(Date date) {
        return getSeqWeek(date2String(date), PATTEN_YMDSFM);
    }

    public static int getSeqWeek(long millis) {
        return getSeqWeek(millis2String(millis), PATTEN_YMDSFM);
    }

    public static int getSeqWeek(String time, String patten) {
        Calendar calendar = Calendar.getInstance();
        Date date = string2Date(time, patten);
        assert date != null;
        calendar.setTime(date);
        return calendar.get(Calendar.WEEK_OF_YEAR);
    }

    /**
     * 獲得一個日期所在的周的星期幾的日期,如要找出2002年2月3日所在周的星期一是幾號
     *
     * @param sdate 默認時間格式,返回的也是默認格式
     * @param num
     * @return
     */
    public static String getWeekFormDate(String sdate, int num) {
        return getWeekFormDate(sdate, PATTEN_YMDSFM, num, PATTEN_YMDSFM);
    }

    public static String getWeekFormDate(String sdate, String patten, int num) {
        return getWeekFormDate(sdate, patten, num, PATTEN_YMDSFM);
    }

    public static String getWeekFormDate(Date sdate, int num) {
        return getWeekFormDate(date2String(sdate), PATTEN_YMDSFM, num, PATTEN_YMDSFM);
    }

    public static String getWeekFormDate(long sdate, int num) {
        return getWeekFormDate(millis2String(sdate), PATTEN_YMDSFM, num, PATTEN_YMDSFM);
    }

    public static String getWeekFormDate(String sdate, String patten, int num, String valuePatten) {
        Date dd = string2Date(sdate, patten);
        Calendar c = Calendar.getInstance();
        assert dd != null;
        c.setTime(dd);
        switch (num) {
            case 1:
// 返回星期一所在的日期
                c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
                break;
            case 2:
// 返回星期二所在的日期
                c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
                break;
            case 3:
// 返回星期三所在的日期
                c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
                break;
            case 4:
// 返回星期四所在的日期
                c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
                break;
            case 5:
// 返回星期五所在的日期
                c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
                break;
            case 6:
// 返回星期六所在的日期
                c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
                break;
            case 0:
// 返回星期日所在的日期
                c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
                break;
            default:
        }
        return new SimpleDateFormat(valuePatten).format(c.getTime());
    }


    /**
     * 獲取星座
     *
     * @param time
     * @return
     */
    public static String getZodiac(final String time) {
        return getZodiac(string2Date(time, DEFAULT_FORMAT));
    }

    public static String getZodiac(final String time, final DateFormat format) {
        return getZodiac(string2Date(time, format));
    }

    public static String getZodiac(final String time, final String patten) {
        return getZodiac(string2Date(time, patten));
    }

    public static String getZodiac(final Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int month = cal.get(Calendar.MONTH) + 1;
        int day = cal.get(Calendar.DAY_OF_MONTH);
        return getZodiac(month, day);
    }

    public static String getZodiac(final long millis) {
        return getZodiac(millis2Date(millis));
    }

    public static String getZodiac(final int month, final int day) {
        return ZODIAC[day >= ZODIAC_FLAGS[month - 1]
                ? month - 1
                : (month + 10) % 12];
    }

    /**
     * 獲取生肖
     *
     * @param time
     * @return
     */
    public static String getChineseZodiac(final String time) {
        return getChineseZodiac(string2Date(time, DEFAULT_FORMAT));
    }

    public static String getChineseZodiac(final String time, final String patten) {
        return getChineseZodiac(string2Date(time, patten));
    }

    public static String getChineseZodiac(final String time, final DateFormat format) {
        return getChineseZodiac(string2Date(time, format));
    }

    public static String getChineseZodiac(final Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return CHINESE_ZODIAC[cal.get(Calendar.YEAR) % 12];
    }

    public static String getChineseZodiac(final int year) {
        return CHINESE_ZODIAC[year % 12];
    }

    /**
     * 獲取英語的星期
     *
     * @param time
     * @return
     */
    public static String getUSWeek(final String time) {
        return getUSWeek(string2Date(time, DEFAULT_FORMAT));
    }

    public static String getUSWeek(final String time, String patten) {
        return getUSWeek(string2Date(time, getDateParser(patten)));
    }

    public static String getUSWeek(final String time, final DateFormat format) {
        return getUSWeek(string2Date(time, format));
    }

    public static String getUSWeek(final Date date) {
        return new SimpleDateFormat("EEEE", Locale.US).format(date);
    }

    public static String getUSWeek(final long millis) {
        return getUSWeek(new Date(millis));
    }


    /**
     * 獲取星期幾
     *
     * @param time
     * @return
     */
    public static String getChineseWeek(final String time) {
        return getChineseWeek(string2Date(time, DEFAULT_FORMAT));
    }

    public static String getChineseWeek(final String time, String patten) {
        return getChineseWeek(string2Date(time, getDateParser(patten)));
    }

    public static String getChineseWeek(final Date date) {
        return new SimpleDateFormat("E", Locale.CHINA).format(date);
    }

    public static String getChineseWeek(final long millis) {
        return getChineseWeek(new Date(millis));
    }

    /**
     * 獲取友好型與當前時間的差
     *
     * @param time The formatted time string.
     * @return the friendly time span by now
     * <ul>
     * <li>如果小于 1 秒鐘內,顯示剛剛</li>
     * <li>如果在 1 分鐘內,顯示 XXX秒前</li>
     * <li>如果在 1 小時內,顯示 XXX分鐘前</li>
     * <li>如果在 1 小時外的今天內,顯示今天15:32</li>
     * <li>如果是昨天的,顯示昨天15:32</li>
     * <li>其余顯示,2016-10-15</li>
     * <li>時間不合法的情況全部日期和時間信息,如星期六 十月 27 14:21:20 CST 2007</li>
     * </ul>
     */
    public static String getFriendlyTimeSpanByNow(final String time) {
        return getFriendlyTimeSpanByNow(time, DEFAULT_FORMAT);
    }

    public static String getFriendlyTimeSpanByNow(final String time,
                                                  final String patten) {
        return getFriendlyTimeSpanByNow(string2Millis(time, patten));
    }

    public static String getFriendlyTimeSpanByNow(final String time,
                                                  final DateFormat format) {
        return getFriendlyTimeSpanByNow(string2Millis(time, format));
    }

    public static String getFriendlyTimeSpanByNow(final Date date) {
        return getFriendlyTimeSpanByNow(date.getTime());
    }

    /**
     * Return the friendly time span by now.
     *
     * @param millis The milliseconds.
     * @return the friendly time span by now
     * <ul>
     * <li>如果小于 1 秒鐘內,顯示剛剛</li>
     * <li>如果在 1 分鐘內,顯示 XXX秒前</li>
     * <li>如果在 1 小時內,顯示 XXX分鐘前</li>
     * <li>如果在 1 小時外的今天內,顯示今天15:32</li>
     * <li>如果是昨天的,顯示昨天15:32</li>
     * <li>其余顯示,2016-10-15</li>
     * <li>時間不合法的情況全部日期和時間信息,如星期六 十月 27 14:21:20 CST 2007</li>
     * </ul>
     */
    public static String getFriendlyTimeSpanByNow(final long millis) {
        long now = System.currentTimeMillis();
        long span = now - millis;
        if (span < 0)
        // U can read http://www.apihome.cn/api/java/Formatter.html to understand it.
        {
            return String.format("%tc", millis);
        }
        if (span < 1000) {
            return "剛剛";
        } else if (span < MIN) {
            return String.format(Locale.getDefault(), "%d秒前", span / SEC);
        } else if (span < HOUR) {
            return String.format(Locale.getDefault(), "%d分鐘前", span / MIN);
        }
        // 獲取當天 00:00
        long wee = getWeeOfToday();
        if (millis >= wee) {
            return String.format("今天%tR", millis);
        } else if (millis >= wee - DAY) {
            return String.format("昨天%tR", millis);
        } else {
            return String.format("%tF", millis);
        }
    }

    /**
     * 獲取合適型與當前時間的差
     *
     * @param time
     * @param precision <li>precision = 0,返回 null</li>
     *                  *                  <li>precision = 1,返回天</li>
     *                  *                  <li>precision = 2,返回天和小時</li>
     *                  *                  <li>precision = 3,返回天、小時和分鐘</li>
     *                  *                  <li>precision = 4,返回天、小時、分鐘和秒</li>
     *                  *                  <li>precision &gt;= 5,返回天、小時、分鐘、秒和毫秒
     * @return
     */
    public static String getFitTimeSpanByNow(final String time, final int precision) {
        return getFitTimeSpan(time, getNowString(), DEFAULT_FORMAT, precision);
    }

    public static String getFitTimeSpanByNow(final String time,
                                             final DateFormat format,
                                             final int precision) {
        return getFitTimeSpan(time, getNowString(format), format, precision);
    }

    public static String getFitTimeSpanByNow(final String time,
                                             final String patten,
                                             final int precision) {
        SimpleDateFormat format = getDateParser(patten);
        return getFitTimeSpan(time, getNowString(format), format, precision);
    }

    public static String getFitTimeSpanByNow(final Date date, final int precision) {
        return getFitTimeSpan(date, getNowDate(), precision);
    }

    public static String getFitTimeSpanByNow(final long millis, final int precision) {
        return getFitTimeSpan(millis, System.currentTimeMillis(), precision);
    }

    /**
     * 獲取時間和當前時間的時間差,時間格式默認(更精確)
     *
     * @param time
     * @param unit
     * @return
     */
    public static long getTimeSpanByNow(final String time, final int unit) {
        return getTimeSpan(time, getNowString(), unit);
    }

    /**
     * (有時分秒更精確)
     *
     * @param time
     * @param patten
     * @param unit
     * @return
     */
    public static long getTimeSpanByNow(final String time,
                                        final String patten,
                                        final int unit) {
        SimpleDateFormat format = getDateParser(patten);
        return getTimeSpan(time, getNowString(format), format, unit);
    }


    /**比較兩個時間,返回想要的值
     * @param time1
     * @param time2
     * @param precision<li>precision = 0,返回 null</li>
     *      *                  <li>precision = 1,返回天</li>
     *      *                  <li>precision = 2,返回天和小時</li>
     *      *                  <li>precision = 3,返回天、小時和分鐘</li>
     *      *                  <li>precision = 4,返回天、小時、分鐘和秒</li>
     *      *                  <li>precision &gt;= 5,返回天、小時、分鐘、秒和毫秒</li>
     * @return
     */
    /**
     * 默認時間格式
     */
    public static String getFitTimeSpan(final String time1, final String time2, final int precision) {
        long delta = string2Millis(time1, DEFAULT_FORMAT) - string2Millis(time2, DEFAULT_FORMAT);
        return millis2FitTimeSpan(delta, precision);
    }

    public static String getFitTimeSpan(final String time1, final String time2, String patten, final int precision) {
        SimpleDateFormat format = getDateParser(patten);
        long delta = string2Millis(time1, format) - string2Millis(time2, format);
        return millis2FitTimeSpan(delta, precision);
    }

    public static String getFitTimeSpan(final String time1, final String time2, DateFormat format, final int precision) {
        long delta = string2Millis(time1, format) - string2Millis(time2, format);
        return millis2FitTimeSpan(delta, precision);
    }

    public static String getFitTimeSpan(final Date date1, final Date date2, final int precision) {
        return millis2FitTimeSpan(date2Millis(date1) - date2Millis(date2), precision);
    }

    /**
     * 13 位時間戳
     *
     * @param millis1
     * @param millis2
     * @param precision
     * @return
     */
    public static String getFitTimeSpan(final long millis1,
                                        final long millis2,
                                        final int precision) {
        return millis2FitTimeSpan(millis1 - millis2, precision);
    }

    private static String millis2FitTimeSpan(long millis, int precision) {
        if (precision <= 0) {
            return null;
        }
        precision = Math.min(precision, 5);
        String[] units = {"天", "小時", "分鐘", "秒", "毫秒"};
        if (millis == 0) {
            return 0 + units[precision - 1];
        }
        StringBuilder sb = new StringBuilder();
        if (millis < 0) {
            sb.append("-");
            millis = -millis;
        }
        int[] unitLen = {86400000, 3600000, 60000, 1000, 1};
        for (int i = 0; i < precision; i++) {
            if (millis >= unitLen[i]) {
                long mode = millis / unitLen[i];
                millis -= mode * unitLen[i];
                sb.append(mode).append(units[i]);
            }
        }
        return sb.toString();
    }

    /**
     * 比較兩個時間的時間差
     *
     * @param time1
     * @param time2
     * @param unit
     * @return
     */
    public static long getTimeSpan(String time1, String time2, int unit) {
        return getTimeSpan(time1, time2, DEFAULT_FORMAT, unit);
    }

    public static long getTimeSpan(String time1, String time2, String patten, int unit) {
        return getTimeSpan(time1, time2, getDateParser(patten), unit);
    }

    public static long getTimeSpan(Date date1, Date date2, int unit) {
        return millis2TimeSpan(date2Millis(date1) - date2Millis(date2), unit);
    }

    public static long getTimeSpan(long millis1, long millis2, int unit) {
        return millis2TimeSpan(millis1 - millis2, unit);
    }

    public static long getTimeSpan(String time1, String time2, DateFormat format, int unit) {
        return millis2TimeSpan(string2Millis(time1, format) - string2Millis(time2, format), unit);
    }

    private static long millis2TimeSpan(long millis, int unit) {
        return millis / unit;
    }

    /**
     * 判斷是否是今天
     *
     * @param time
     * @return
     */
    public static boolean isToday(String time) {
        return isToday(string2Millis(time, DEFAULT_FORMAT));
    }

    public static boolean isToday(final long millis) {
        long wee = getWeeOfToday();
        return millis >= wee && millis < wee + DAY;
    }

    private static long getWeeOfToday() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTimeInMillis();
    }

    public static boolean isToday(Date date) {
        return isToday(date.getTime());
    }

    /**
     * 獲取SimpleDateFormat
     *
     * @param pattern
     * @return
     */
    private static SimpleDateFormat getDateParser(String pattern) {
        return new SimpleDateFormat(pattern);
    }

    public static long string2Millis(String time) {
        return string2Millis(time, DEFAULT_FORMAT);
    }

    public static long string2Millis(String time, String patten) {
        try {
            return getDateParser(patten).parse(time).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return -1;
    }

    public static long string2Millis(String time, DateFormat format) {
        try {
            return format.parse(time).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return -1;
    }

    /**
     * 時間戳轉外 String 類型日期
     *
     * @param millis
     * @return
     */
    public static String millis2String(long millis) {
        return millis2String(millis, DEFAULT_FORMAT);
    }

    public static String millis2String(long millis, DateFormat format) {
        return format.format(new Date(millis));
    }

    public static String millis2String(long millis, String pattern) {
        return millis2String(millis, getDateParser(pattern));
    }

    /**
     * string類型時間轉為 date 類型
     *
     * @param time
     * @return
     */
    public static Date string2Date(String time) {
        return string2Date(time, DEFAULT_FORMAT);
    }

    public static Date string2Date(String time, String pattern) {
        try {
            return getDateParser(pattern).parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Date string2Date(String time, DateFormat format) {
        try {
            return format.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * date 轉成 string
     *
     * @param date
     * @return
     */
    public static String date2String(Date date) {
        return date2String(date, DEFAULT_FORMAT);
    }

    public static String date2String(Date date, DateFormat format) {
        return format.format(date);
    }

    /**
     * 返回自定義String類型時間
     */
    public static String date2String(Date date, String pattern) {
        return getDateParser(pattern).format(date);
    }

    /**
     * 時間戳毫秒轉成 Date
     *
     * @param millis
     * @return
     */
    public static Date millis2Date(long millis) {
        return new Date(millis);
    }

    /**
     * date 轉時間戳
     *
     * @param date
     * @return
     */
    public static long date2Millis(Date date) {
        return date.getTime();
    }

    /**
     * 根據傳入的年份和月份,獲取上一個月有多少天
     *
     * @param year
     * @param month
     * @return
     */
    public static int getLastDaysOfMonth(int year, int month) {
        int lastDaysOfMonth = 0;
        if (month == 1) {
            lastDaysOfMonth = getDaysOfMonth(year - 1, 12);
        } else {
            lastDaysOfMonth = getDaysOfMonth(year, month - 1);
        }
        return lastDaysOfMonth;
    }


    /**
     * 判斷是否為閏年
     *
     * @param
     * @return
     */
    public static boolean isLeapYear(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int year = cal.get(Calendar.YEAR);
        return isLeapYear(year);
    }

    public static boolean isLeapYear(int year) {
        return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
    }

    public static boolean isLeapYear(long millis) {
        return isLeapYear(millis2Date(millis));
    }

    /**
     * 判斷是否潤年,默認格式
     */
    public static boolean isLeapYear(String time) {
        Date date = string2Date(time);
        return isLeapYear(date);
    }

    /**
     * 判斷是否潤年,自定義格式
     */
    public static boolean isLeapYear(String time, String patten) {
        Date date = string2Date(time, patten);
        return isLeapYear(date);
    }


    /**
     * 根據傳入的年份和月份,判斷當前月有多少天
     *
     * @param year
     * @param month
     * @return
     */
    public static int getDaysOfMonth(int year, int month) {
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                return 31;
            case 2:
                if (isLeapYear(year)) {
                    return 29;
                } else {
                    return 28;
                }
            case 4:
            case 6:
            case 9:
            case 11:
                return 30;
            default:
        }
        return -1;
    }


    /**
     * 獲取當前年份
     *
     * @return
     */
    public static String getNowY() {
        return String.valueOf(Calendar.getInstance().get(Calendar.YEAR));
    }

    public static int getNowY2() {
        return Calendar.getInstance().get(Calendar.YEAR);
    }

    /**
     * 獲取當前月份
     *
     * @return
     */
    public static int getNowMonth() {
        return Calendar.getInstance().get(Calendar.MONTH) + 1;
    }

    /**
     * 獲取當前日期是該月的第幾天
     *
     * @return
     */
    public static int getNowDay() {
        return Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 獲取當前日期是該周的第幾天,周日是第一天返回 1,周六最后一天返回 7
     *
     * @return
     */
    public static int getNowWeek() {
        return Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
    }


    /**
     * 獲取當前時間 Date 類型
     *
     * @return
     */
    public static Date getNowDate() {
        return new Date();
    }

    /**
     * 獲取當前是幾點,二十四小時制
     */
    public static int getNowHour() {
        return Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 獲取當前是幾分
     *
     * @return
     */
    public static int getNowMinute() {
        return Calendar.getInstance().get(Calendar.MINUTE);
    }

    /**
     * 獲取當前秒
     *
     * @return
     */
    public static int getNowSecond() {
        return Calendar.getInstance().get(Calendar.SECOND);
    }


    /**
     * 獲取當前時間字符串,年月日時分秒
     *
     * @return
     */
    public static String getNowString() {
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(PATTEN_YMDSFM);
//        return simpleDateFormat.format(getNowMills());
        return DEFAULT_FORMAT.format(getNowMills());
    }

    /**
     * 獲取當前時間字符串,自定義返回類型
     *
     * @return
     */
    public static String getNowString(String pattern) {
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
////        return simpleDateFormat.format(getNowMills());
        return getDateParser(pattern).format(getNowMills());
    }

    public static String getNowString(DateFormat dateFormat) {
        return dateFormat.format(getNowMills());
    }

    /**
     * 獲取當前時間的時間戳,毫秒
     *
     * @return
     */
    public static long getNowMills() {
        return System.currentTimeMillis();
    }


}


參考:
https://juejin.im/post/6844903848847523854#heading-0
https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html
http://luokangyuan.com/dateutilsxue-xi-bi-ji/
https://blog.csdn.net/yaomingyang/article/details/79138466
https://www.cnblogs.com/abcwt112/p/5147537.html
http://www.lxweimin.com/p/1cbc6740d11a
https://www.cnblogs.com/wangyayun/p/11732263.html
https://my.oschina.net/u/437309/blog/3066640

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370