时间工具类

package com.liumu.util;

import java.sql.Timestamp;

import java.text.DateFormat;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

import java.util.HashMap;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.List;

/**

* 时间工具类

* @author: wbm

* @date: 2019年1月16日 下午5:22:58

*/

public class DateUtil{ 


    // ==格式到年== 

    /**

    * 日期格式,年份,例如:2004,2008

    */ 

    public static final String DATE_FORMAT_YYYY = "yyyy"; 



    // ==格式到年月 == 

    /**

    * 日期格式,年份和月份,例如:200707,200808

    */ 

    public static final String DATE_FORMAT_YYYYMM = "yyyyMM"; 


    /**

    * 日期格式,年份和月份,例如:200707,2008-08

    */ 

    public static final String DATE_FORMAT_YYYY_MM = "yyyy-MM"; 



    // ==格式到年月日== 

    /**

    * 日期格式,年月日,例如:050630,080808

    */ 

    public static final String DATE_FORMAT_YYMMDD = "yyMMdd"; 


    /**

    * 日期格式,年月日,用横杠分开,例如:06-12-25,08-08-08

    */ 

    public static final String DATE_FORMAT_YY_MM_DD = "yy-MM-dd"; 


    /**

    * 日期格式,年月日,例如:20050630,20080808

    */ 

    public static final String DATE_FORMAT_YYYYMMDD = "yyyyMMdd"; 


    /**

    * 日期格式,年月日,用横杠分开,例如:2006-12-25,2008-08-08

    */ 

    public static final String DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd"; 


    /**

    * 日期格式,年月日,例如:2016.10.05

    */ 

    public static final String DATE_FORMAT_POINTYYYYMMDD = "yyyy.MM.dd"; 


    /**

    * 日期格式,年月日,例如:2016年10月05日

    */ 

    public static final String DATE_TIME_FORMAT_YYYY年MM月DD日 = "yyyy年MM月dd日"; 



    // ==格式到年月日 时分 == 


    /**

    * 日期格式,年月日时分,例如:200506301210,200808081210

    */ 

    public static final String DATE_FORMAT_YYYYMMDDHHmm = "yyyyMMddHHmm"; 


    /**

    * 日期格式,年月日时分,例如:20001230 12:00,20080808 20:08

    */ 

    public static final String DATE_TIME_FORMAT_YYYYMMDD_HH_MI = "yyyyMMdd HH:mm"; 


    /**

    * 日期格式,年月日时分,例如:2000-12-30 12:00,2008-08-08 20:08

    */ 

    public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI = "yyyy-MM-dd HH:mm"; 



    // ==格式到年月日 时分秒== 

    /**

    * 日期格式,年月日时分秒,例如:20001230120000,20080808200808

    */ 

    public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISS = "yyyyMMddHHmmss"; 


    /**

    * 日期格式,年月日时分秒,年月日用横杠分开,时分秒用冒号分开

    * 例如:2005-05-10 23:20:00,2008-08-08 20:08:08

    */ 

    public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS = "yyyy-MM-dd HH:mm:ss"; 



    // ==格式到年月日 时分秒 毫秒== 

    /**

    * 日期格式,年月日时分秒毫秒,例如:20001230120000123,20080808200808456

    */ 

    public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS = "yyyyMMddHHmmssSSS"; 



    // ==特殊格式== 

    /**

    * 日期格式,月日时分,例如:10-05 12:00

    */ 

    public static final String DATE_FORMAT_MMDDHHMI = "MM-dd HH:mm"; 



    /* ************工具方法***************  */ 


    /** 

    * 获取某日期的年份

    * @param date 

    * @return 

    */ 

    public static Integer getYear(Date date) { 

        Calendar cal = Calendar.getInstance(); 

        cal.setTime(date); 

        return cal.get(Calendar.YEAR); 

    }   


    /**

    * 获取某日期的月份

    * @param date

    * @return

    */ 

    public static Integer getMonth(Date date) { 

        Calendar cal = Calendar.getInstance(); 

        cal.setTime(date); 

        return cal.get(Calendar.MONTH) + 1; 

    } 


    /**

    * 获取某日期的日数

    * @param date

    * @return

    */ 

    public static Integer getDay(Date date){ 

        Calendar cal = Calendar.getInstance(); 

        cal.setTime(date); 

        int day=cal.get(Calendar.DATE);//获取日 

        return day; 

    } 


    /**

    * 格式化Date时间

    * @param time Date类型时间

    * @param timeFromat String类型格式

    * @return 格式化后的字符串

    */ 

    public static String parseDateToStr(Date time, String timeFromat){ 

        DateFormat dateFormat=new SimpleDateFormat(timeFromat); 

        return dateFormat.format(time); 

    } 


    /**

    * 格式化Timestamp时间

    * @param timestamp Timestamp类型时间

    * @param timeFromat

    * @return 格式化后的字符串

    */ 

    public static String parseTimestampToStr(Timestamp timestamp,String timeFromat){ 

        SimpleDateFormat df = new SimpleDateFormat(timeFromat); 

        return df.format(timestamp); 

    } 


    /**

    * 格式化Date时间

    * @param time Date类型时间

    * @param timeFromat String类型格式

    * @param defaultValue 默认值为当前时间Date

    * @return 格式化后的字符串

    */ 

    public static String parseDateToStr(Date time, String timeFromat, final Date defaultValue){ 

        try{ 

            DateFormat dateFormat=new SimpleDateFormat(timeFromat); 

            return dateFormat.format(time); 

        }catch (Exception e){ 

            if(defaultValue!=null) 

                return parseDateToStr(defaultValue, timeFromat); 

            else 

                return parseDateToStr(new Date(), timeFromat); 

        } 

    } 


    /**

    * 格式化Date时间

    * @param time Date类型时间

    * @param timeFromat String类型格式

    * @param defaultValue 默认时间值String类型

    * @return 格式化后的字符串

    */ 

    public static String parseDateToStr(Date time, String timeFromat, final String defaultValue){ 

        try{ 

            DateFormat dateFormat=new SimpleDateFormat(timeFromat); 

            return dateFormat.format(time); 

        }catch (Exception e){ 

            return defaultValue; 

        } 

    } 


    /**

    * 格式化String时间

    * @param time String类型时间

    * @param timeFromat String类型格式

    * @return 格式化后的Date日期

    */ 

    public static Date parseStrToDate(String time, String timeFromat) { 

        if (time == null || time.equals("")) { 

            return null; 

        } 


        Date date=null; 

        try{ 

            DateFormat dateFormat=new SimpleDateFormat(timeFromat); 

            date=dateFormat.parse(time); 

        }catch(Exception e){ 


        } 

        return date; 

    } 


    /**

    * 格式化String时间

    * @param strTime String类型时间

    * @param timeFromat String类型格式

    * @param defaultValue 异常时返回的默认值

    * @return

    */ 

    public static Date parseStrToDate(String strTime, String timeFromat, 

            Date defaultValue) { 

        try { 

            DateFormat dateFormat = new SimpleDateFormat(timeFromat); 

            return dateFormat.parse(strTime); 

        } catch (Exception e) { 

            return defaultValue; 

        } 

    } 


    /**

    * 当strTime为2008-9时返回为2008-9-1 00:00格式日期时间,无法转换返回null.

    * @param strTime

    * @return

    */ 

    public static Date strToDate(String strTime) { 

        if(strTime==null || strTime.trim().length()<=0) 

            return null; 


        Date date = null; 

        List<String> list = new ArrayList<String>(0); 


        list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS); 

        list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS); 

        list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI); 

        list.add(DATE_TIME_FORMAT_YYYYMMDD_HH_MI); 

        list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISS); 

        list.add(DATE_FORMAT_YYYY_MM_DD); 

        //list.add(DATE_FORMAT_YY_MM_DD); 

        list.add(DATE_FORMAT_YYYYMMDD); 

        list.add(DATE_FORMAT_YYYY_MM); 

        list.add(DATE_FORMAT_YYYYMM); 

        list.add(DATE_FORMAT_YYYY); 



        for (Iterator iter = list.iterator(); iter.hasNext();) { 

            String format = (String) iter.next(); 

            if(strTime.indexOf("-")>0 && format.indexOf("-")<0) 

                continue; 

            if(strTime.indexOf("-")<0 && format.indexOf("-")>0) 

                continue; 

            if(strTime.length()>format.length()) 

                continue; 

            date = parseStrToDate(strTime, format); 

            if (date != null) 

                break; 

        } 


        return date; 

    } 


    /**

    * 解析两个日期之间的所有月份

    * @param beginDateStr 开始日期,至少精确到yyyy-MM

    * @param endDateStr 结束日期,至少精确到yyyy-MM

    * @return yyyy-MM日期集合

    */   

    public static List<String> getMonthListOfDate(String beginDateStr, String endDateStr) {   

        // 指定要解析的时间格式   

        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM");   

        // 返回的月份列表   

        String sRet = "";   


        // 定义一些变量   

        Date beginDate = null;   

        Date endDate = null;   


        GregorianCalendar beginGC = null;   

        GregorianCalendar endGC = null;   

        List<String> list = new ArrayList<String>();   


        try {   

            // 将字符串parse成日期   

            beginDate = f.parse(beginDateStr);   

            endDate = f.parse(endDateStr);   


            // 设置日历   

            beginGC = new GregorianCalendar();   

            beginGC.setTime(beginDate);   


            endGC = new GregorianCalendar();   

            endGC.setTime(endDate);   


            // 直到两个时间相同   

            while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {   

                sRet = beginGC.get(Calendar.YEAR) + "-"   

                        + (beginGC.get(Calendar.MONTH) + 1);   

                list.add(sRet);   

                // 以月为单位,增加时间   

                beginGC.add(Calendar.MONTH, 1);   

            }   

            return list;   

        } catch (Exception e) {   

            e.printStackTrace();   

            return null;   

        }   

    }   


    /** 

    * 解析两个日期段之间的所有日期

    * @param beginDateStr 开始日期  ,至少精确到yyyy-MM-dd

    * @param endDateStr 结束日期  ,至少精确到yyyy-MM-dd

    * @return yyyy-MM-dd日期集合

    */   

    public static List<String> getDayListOfDate(String beginDateStr, String endDateStr) {   

        // 指定要解析的时间格式   

        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");   


        // 定义一些变量   

        Date beginDate = null;   

        Date endDate = null;   


        Calendar beginGC = null;   

        Calendar endGC = null;   

        List<String> list = new ArrayList<String>();   


        try {   

            // 将字符串parse成日期   

            beginDate = f.parse(beginDateStr);   

            endDate = f.parse(endDateStr);   


            // 设置日历   

            beginGC = Calendar.getInstance();   

            beginGC.setTime(beginDate);   


            endGC = Calendar.getInstance();   

            endGC.setTime(endDate);   

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   


            // 直到两个时间相同   

            while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {   


                list.add(sdf.format(beginGC.getTime()));   

                // 以日为单位,增加时间   

                beginGC.add(Calendar.DAY_OF_MONTH, 1);   

            }   

            return list;   

        } catch (Exception e) {   

            e.printStackTrace();   

            return null;   

        }   

    }   


    /**

    * 获取当下年份指定前后数量的年份集合

    * @param before 当下年份前年数

    * @param behind 当下年份后年数

    * @return 集合

    */ 

    public static List<Integer> getYearListOfYears(int before,int behind) { 

        if (before<0 || behind<0) { 

            return null; 

        } 

        List<Integer> list = new ArrayList<Integer>();   

        Calendar c = null;   

        c = Calendar.getInstance();   

        c.setTime(new Date());   

        int currYear = Calendar.getInstance().get(Calendar.YEAR);   


        int startYear = currYear - before;   

        int endYear = currYear + behind;   

        for (int i = startYear; i < endYear; i++) {   

            list.add(Integer.valueOf(i));   

        }   

        return list;   

    } 


    /** 

    * 获取当前日期是一年中第几周 

    * @param date 

    * @return 

    */   

    public static Integer getWeekthOfYear(Date date) {   

        Calendar c = new GregorianCalendar();   

        c.setFirstDayOfWeek(Calendar.MONDAY);   

        c.setMinimalDaysInFirstWeek(7);   

        c.setTime(date);   


        return c.get(Calendar.WEEK_OF_YEAR);   

    } 


    /**

    * 获取某一年各星期的始终时间

    * 实例:getWeekList(2016),第52周(从2016-12-26至2017-01-01)

    * @param 年份

    * @return

    */   

    public static HashMap<Integer,String> getWeekTimeOfYear(int year) {   

        HashMap<Integer,String> map = new LinkedHashMap<Integer,String>();   

        Calendar c = new GregorianCalendar();   

        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);   

        int count = getWeekthOfYear(c.getTime());   


        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   

        String dayOfWeekStart = "";   

        String dayOfWeekEnd = "";   

        for (int i = 1; i <= count; i++) {   

            dayOfWeekStart = sdf.format(getFirstDayOfWeek(year, i));   

            dayOfWeekEnd = sdf.format(getLastDayOfWeek(year, i));   

            map.put(Integer.valueOf(i), "第"+i+"周(从"+dayOfWeekStart + "至" + dayOfWeekEnd+")");   

        }   

        return map;   


    }   


    /** 

    * 获取某一年的总周数 

    * @param year 

    * @return 

    */   

    public static Integer getWeekCountOfYear(int year){   

        Calendar c = new GregorianCalendar();   

        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);   

        int count = getWeekthOfYear(c.getTime());   

        return count;   

    }   


    /** 

    * 获取指定日期所在周的第一天 

    * @param date 

    * @return 

    */   

    public static Date getFirstDayOfWeek(Date date) {   

        Calendar c = new GregorianCalendar();   

        c.setFirstDayOfWeek(Calendar.MONDAY);   

        c.setTime(date);   

        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday   

        return c.getTime();   

    }   


    /** 

    * 获取指定日期所在周的最后一天 

    * @param date 

    * @return 

    */   

    public static Date getLastDayOfWeek(Date date) { 

        Calendar c = new GregorianCalendar(); 

        c.setFirstDayOfWeek(Calendar.MONDAY); 

        c.setTime(date); 

        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday 

        return c.getTime(); 

    } 


    /** 

    * 获取某年某周的第一天 

    * @param year 目标年份

    * @param week 目标周数

    * @return 

    */   

    public static Date getFirstDayOfWeek(int year, int week) {   

        Calendar c = new GregorianCalendar();   

        c.set(Calendar.YEAR, year);   

        c.set(Calendar.MONTH, Calendar.JANUARY);   

        c.set(Calendar.DATE, 1);   


        Calendar cal = (GregorianCalendar) c.clone(); 

        cal.add(Calendar.DATE, week * 7);   


        return getFirstDayOfWeek(cal.getTime());   

    }   


    /** 

    * 获取某年某周的最后一天 

    * @param year 目标年份

    * @param week 目标周数

    * @return 

    */   

    public static Date getLastDayOfWeek(int year, int week) {   

        Calendar c = new GregorianCalendar();   

        c.set(Calendar.YEAR, year);   

        c.set(Calendar.MONTH, Calendar.JANUARY);   

        c.set(Calendar.DATE, 1);   


        Calendar cal = (GregorianCalendar) c.clone();   

        cal.add(Calendar.DATE, week * 7);   


        return getLastDayOfWeek(cal.getTime());   

    }   


    /** 

    * 获取某年某月的第一天 

    * @param year 目标年份

    * @param month 目标月份

    * @return 

    */   

    public static Date getFirstDayOfMonth(int year,int month){   

        month = month-1;   

        Calendar  c  =  Calendar.getInstance();     

        c.set(Calendar.YEAR, year);   

        c.set(Calendar.MONTH, month);   


        int day = c.getActualMinimum(c.DAY_OF_MONTH);   


        c.set(Calendar.DAY_OF_MONTH, day); 

        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(); 

    }   


    /** 

    * 获取某年某月的最后一天 

    * @param year 目标年份

    * @param month 目标月份

    * @return 

    */   

    public static Date getLastDayOfMonth(int year,int month){   

        month = month-1;   

        Calendar  c  =  Calendar.getInstance();     

        c.set(Calendar.YEAR, year);   

        c.set(Calendar.MONTH, month);   

        int day = c.getActualMaximum(c.DAY_OF_MONTH);   

        c.set(Calendar.DAY_OF_MONTH, day); 

        c.set(Calendar.HOUR_OF_DAY, 23); 

        c.set(Calendar.MINUTE, 59); 

        c.set(Calendar.SECOND, 59); 

        c.set(Calendar.MILLISECOND, 999); 

        return c.getTime();   

    }   


    /** 

    * 获取某个日期为星期几 

    * @param date 

    * @return String "星期*"

    */   

    public static String getDayWeekOfDate1(Date date) {   

        String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; 

        Calendar cal = Calendar.getInstance(); 

        cal.setTime(date); 


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

        if (w < 0) 

            w = 0; 


        return weekDays[w]; 

    }   


    /**

    * 获得指定日期的星期几数

    * @param date

    * @return int 

    */ 

    public static Integer getDayWeekOfDate2(Date date){   

        Calendar aCalendar = Calendar.getInstance();   

        aCalendar.setTime(date);     

        int weekDay = aCalendar.get(Calendar.DAY_OF_WEEK);     

        return weekDay; 

    } 


    /**

    * 验证字符串是否为日期

    * 验证格式:YYYYMMDD、YYYY_MM_DD、YYYYMMDDHHMISS、YYYYMMDD_HH_MI、YYYY_MM_DD_HH_MI、YYYYMMDDHHMISSSSS、YYYY_MM_DD_HH_MI_SS

    * @param strTime

    * @return null时返回false;true为日期,false不为日期

    */ 

    public static boolean validateIsDate(String strTime) { 

        if (strTime == null || strTime.trim().length() <= 0) 

            return false; 


        Date date = null; 

        List<String> list = new ArrayList<String>(0); 


        list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS); 

        list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS); 

        list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI); 

        list.add(DATE_TIME_FORMAT_YYYYMMDD_HH_MI); 

        list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISS); 

        list.add(DATE_FORMAT_YYYY_MM_DD); 

        //list.add(DATE_FORMAT_YY_MM_DD); 

        list.add(DATE_FORMAT_YYYYMMDD); 

        //list.add(DATE_FORMAT_YYYY_MM); 

        //list.add(DATE_FORMAT_YYYYMM); 

        //list.add(DATE_FORMAT_YYYY); 


        for (Iterator iter = list.iterator(); iter.hasNext();) { 

            String format = (String) iter.next(); 

            if(strTime.indexOf("-")>0 && format.indexOf("-")<0) 

                continue; 

            if(strTime.indexOf("-")<0 && format.indexOf("-")>0) 

                continue; 

            if(strTime.length()>format.length()) 

                continue; 

            date = parseStrToDate(strTime.trim(), format); 

            if (date != null) 

                break; 

        } 


        if (date != null) { 

            System.out.println("生成的日期:"+DateUtil.parseDateToStr(date, DateUtil.DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS, "--null--")); 

            return true; 

        } 

        return false; 

    } 


    /**

    * 将指定日期的时分秒格式为零

    * @param date

    * @return

    */ 

    public static Date formatHhMmSsOfDate(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); 

        cal.set(Calendar.MILLISECOND, 0); 

        return cal.getTime(); 

    } 


    /**

    * 获得指定时间加减参数后的日期(不计算则输入0) 

    * @param date 指定日期

    * @param year 年数,可正可负

    * @param month 月数,可正可负

    * @param day 天数,可正可负

    * @param hour 小时数,可正可负

    * @param minute 分钟数,可正可负

    * @param second 秒数,可正可负

    * @param millisecond 毫秒数,可正可负

    * @return 计算后的日期

    */ 

    public static Date addDate(Date date,int year,int month,int day,int hour,int minute,int second,int millisecond){ 

        Calendar c = Calendar.getInstance(); 

        c.setTime(date); 

        c.add(Calendar.YEAR, year);//加减年数 

        c.add(Calendar.MONTH, month);//加减月数 

        c.add(Calendar.DATE, day);//加减天数 

        c.add(Calendar.HOUR,hour);//加减小时数 

        c.add(Calendar.MINUTE, minute);//加减分钟数 

        c.add(Calendar.SECOND, second);//加减秒 

        c.add(Calendar.MILLISECOND, millisecond);//加减毫秒数 


        return c.getTime(); 

    } 


    /**

    * 获得两个日期的时间戳之差

    * @param startDate

    * @param endDate

    * @return

    */ 

    public static Long getDistanceTimestamp(Date startDate,Date endDate){ 

        long daysBetween=(endDate.getTime()-startDate.getTime()+1000000)/(3600*24*1000); 

        return daysBetween; 

    } 


    /**

    * 判断二个时间是否为同年同月

    * @param date1

    * @param date2

    * @return

    */ 

    public static Boolean compareIsSameMonth(Date date1,Date date2){ 

        boolean flag = false; 

        int year1  = getYear(date1); 

        int year2 = getYear(date2); 

        if(year1 == year2){ 

            int month1 = getMonth(date1); 

            int month2 = getMonth(date2); 

            if(month1 == month2)flag = true; 

        } 

        return flag; 

    } 


    /** 

    * 获得两个时间相差距离多少天多少小时多少分多少秒 

    * @param str1 时间参数 1 格式:1990-01-01 12:00:00 

    * @param str2 时间参数 2 格式:2009-01-01 12:00:00 

    * @return long[] 返回值为:{天, 时, 分, 秒} 

    */ 

    public static long[] getDistanceTime(Date one, Date two) { 

        long day = 0; 

        long hour = 0; 

        long min = 0; 

        long sec = 0; 

        try { 


            long time1 = one.getTime(); 

            long time2 = two.getTime(); 

            long diff ; 

            if(time1<time2) { 

                diff = time2 - time1; 

            } else { 

                diff = time1 - time2; 

            } 

            day = diff / (24 * 60 * 60 * 1000); 

            hour = (diff / (60 * 60 * 1000) - day * 24); 

            min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60); 

            sec = (diff/1000-day*24*60*60-hour*60*60-min*60); 

        } catch (Exception e) { 

            e.printStackTrace(); 

        } 

        long[] times = {day, hour, min, sec}; 

        return times; 

    } 


    /** 

    * 两个时间相差距离多少天多少小时多少分多少秒 

    * @param str1 时间参数 1 格式:1990-01-01 12:00:00 

    * @param str2 时间参数 2 格式:2009-01-01 12:00:00 

    * @return String 返回值为:{天, 时, 分, 秒}

    */ 

    public static long[] getDistanceTime(String str1, String str2) { 

        DateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS); 

        Date one; 

        Date two; 

        long day = 0; 

        long hour = 0; 

        long min = 0; 

        long sec = 0; 

        try { 

            one = df.parse(str1); 

            two = df.parse(str2); 

            long time1 = one.getTime(); 

            long time2 = two.getTime(); 

            long diff ; 

            if(time1<time2) { 

                diff = time2 - time1; 

            } else { 

                diff = time1 - time2; 

            } 

            day = diff / (24 * 60 * 60 * 1000); 

            hour = (diff / (60 * 60 * 1000) - day * 24); 

            min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60); 

            sec = (diff/1000-day*24*60*60-hour*60*60-min*60); 

        } catch (ParseException e) { 

            e.printStackTrace(); 

        } 

        long[] times = {day, hour, min, sec}; 

        return times; 

    } 


    /** 

    * 两个时间之间相差距离多少天 

    * @param one 时间参数 1: 

    * @param two 时间参数 2: 

    * @return 相差天数 

    */ 

    public static Long getDistanceDays(String str1, String str2) throws Exception{ 

        DateFormat df = new SimpleDateFormat(DATE_FORMAT_YYYY_MM_DD); 

        Date one; 

        Date two; 

        long days=0; 

        try { 

            one = df.parse(str1); 

            two = df.parse(str2); 

            long time1 = one.getTime(); 

            long time2 = two.getTime(); 

            long diff ; 

            if(time1<time2) { 

                diff = time2 - time1; 

            } else { 

                diff = time1 - time2; 

            } 

            days = diff / (1000 * 60 * 60 * 24); 

        } catch (ParseException e) { 

            e.printStackTrace(); 

        } 

        return days; 

    } 


    /**

    * 获取指定时间的那天 00:00:00.000 的时间

    * @param date

    * @return

    */ 

    public static Date getDayBeginTime(final Date date) { 

            Calendar c = Calendar.getInstance(); 

            c.setTime(date); 

            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(); 

    } 


    /**

    * 获取指定时间的那天 23:59:59.999 的时间

    * @param date

    * @return

    */ 

    public static Date getDayEndTime(final Date date) { 

            Calendar c = Calendar.getInstance(); 

            c.setTime(date); 

            c.set(Calendar.HOUR_OF_DAY, 23); 

            c.set(Calendar.MINUTE, 59); 

            c.set(Calendar.SECOND, 59); 

            c.set(Calendar.MILLISECOND, 999); 

            return c.getTime(); 

    } 


/*   

    public static void main(String [] args){ 

        try { 

            DateUtil dateUtil = new DateUtil(); 

            System.out.println(); 


        } catch (Exception e) { 

            // TODO: handle exception 

        } 

    }  */

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 他出差一周了,急急忙忙的从机场赶回家,今天是她的生日,说好了要为她庆生的,还好来的及。 “亲爱的,我回来了。” 打...
    謹言阅读 231评论 0 1
  • 01 最新一期的《奇葩说》,探讨了一个预知别人生命时长的脑洞题。 全程看下来,最触动我的,不是席瑞亲诉朋友意外离世...
    洋芋丝丝阅读 1,282评论 5 9
  • 今天晚上去接女儿回来的路上,女儿问我幼儿园是不是过几天就不用去了,我说是,女儿说那是不是要把借的书拿回来,我说不光...
    家有千金_aa21阅读 151评论 0 0