1. 程式人生 > >Java中的日期轉化格式DateUtil工具類

Java中的日期轉化格式DateUtil工具類

最近在專案中經常會遇到各種的日期格式轉化。所以,參考一些資料就寫了一個工具類DateUtil。

日期格式包括年(yyyy)、年月(yyyyMM、yyyy-MM)、年月日(yyyyMMdd、yyyy-MM-dd)、年月日時分(yyyyMMddHHmm、yyyy-MM-dd HH:mm)、年月日時分秒(yyyyMMddHHMISS、yyyy-MM-dd HH:MI:SS)等各種格式。

方法1. 根據Date時間,轉化成上面各種日期格式;

          2. 解析兩個日期之間的所有月份

          3. 解析兩個日期之間的所有日期

          4. 獲取當下年份指定前後數量的年份集合

          5. 獲取當前日期是一年中的第幾周

          6. 獲取某一年各星期的始終時間

          7. 獲取某一年的總週數

          8. 獲取指定日期所在周的第一天或者最後一天

          9. 獲取某個日期是星期幾

          10. 驗證字串是否是日期

          11. 獲得指定日期前後時間段的時間

          12. 獲得兩個日期的時間戳之差

          13. 判段兩個時間是否為同年同月

          14. 判斷兩個時間的時間差(結果按照格式化輸出)

相關程式碼如下:

package 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;

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_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS);   
        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  
        }  
          
    }  */
      
}  

相關推薦

Java日期轉化格式DateUtil工具

最近在專案中經常會遇到各種的日期格式轉化。所以,參考一些資料就寫了一個工具類DateUtil。日期格式包括:年(yyyy)、年月(yyyyMM、yyyy-MM)、年月日(yyyyMMdd、yyyy-MM-dd)、年月日時分(yyyyMMddHHmm、yyyy-MM-dd HH

Java的AES加解密工具:AESUtils

.com asc += for frame day 換行 fault mod 本人手寫已測試,大家可以參考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysC

java讀取Property檔案屬性工具

java中讀取Property配置檔案屬性工具類: import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * 讀取Property配置檔

java操作時間的常用工具

在開發中經常會遇到操作時間類的業務,雖然程式碼部分並不算難,但為了今後查詢和使用方便,現將常用的幾種操作時間的工具類程式碼予以羅列,以便今後參考; 下面直接上程式碼,難度不大,諸位小夥伴可自行參考,酌情使用, public class TimeUtils

JAVAMD5加密(MD5工具

工具類如下:import java.security.MessageDigest; /** * @Author:Starry * @Description: * @Date:Created in 9

Java日期時間格式與毫秒數的相互轉換

1、輸入日期,轉化為毫秒數: 用calendar方法(calendar.getTime) 程式碼: public static void main(String[] args) { Cale

java 呼叫webservice(xml格式交換)工具

今天在公司開發一個webservice相關的專案使用RPC呼叫時候,由於報文返回過大,出現了記憶體溢位的情況。這裡可以使用axis訪問webservice,這裡是我封裝的工具類。 package com.handkoo.utils; import javax.xml.

javaredis分散式鎖的工具

package com.qlchat.redis.cache; import java.util.*; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory;

Java讀取大檔案的工具

超大檔案容易導致記憶體耗盡和重複讀取,怎麼辦?1、傳統的在記憶體中讀取這種方法帶來的問題是檔案的所有行都被存放在記憶體中,當檔案足夠大時很快就會導致程式丟擲OutOfMemoryError 異常。2、檔案流使用java.util.Scanner類掃描檔案的內容,一行一行連續地

JavaMD5加密、解密工具

length pri 一個 stringbu util new ron abc 轉換 package org.hzp.util; import java.io.UnsupportedEncodingException; import java.security.

轉換日期格式工具

ring mage code edate print util println pan date() 寫一個工具類,用來轉換固定的日期格式: import java.text.SimpleDateFormat; import java.util.Date; public

Java時間格式轉換工具

string stact 修改 stack time mil 日期格式轉換 pla gettime 把當前時間修改成指定時間 //把當前時間修改成指定時間 public String dateUtil(Integer seconds, String dateFo

轉換一定格式日期Date型別的工具

package com.hsx.date; import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { public static DateUtil dateUtil; pri

JAVA DateUtil 工具封裝(轉)

原文連結 https://blog.csdn.net/wangpeng047/article/details/8295623    作者三次整理後的程式碼 下載連結   https://www.lanzous.com/i2pzpda github連結:

Java生成隨機數工具,進位制之間的轉換工具,獲取指定時間,時間格式轉換工具

廢話不多說,貢獻一下code 1.編號生成工具 import org.apache.commons.lang3.StringUtils; import java.math.BigInteger; import java.text.SimpleDa

java把13位時間戳轉換成"yyyy-MM-dd HH:mm:ss"格式工具

package com.liming.test; import java.sql.SQLException; import java.text.SimpleDateFormat; import ja

日期加減及Java日期操作演算法大全 (轉)

計算 兩日期間隔天數  import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; pub

Java日期資料型別的處理之格式轉換

日期以及時間格式處理,在Java中時間格式一般會涉及到的資料型別包括Calendar類和Date類。 Date類: 1、Date型別轉String型別(以時間格式1970-01-01 01:01:01為例) //yyyy-MM-dd HH:mm:ss表示24時間進位制

Java判斷一個字串是否包含中文字元工具

Java判斷一個字串是否有中文一般情況是利用Unicode編碼(CJK統一漢字的編碼區間:0x4e00–0x9fbb)的正則來做判斷,但是其實這個區間來判斷中文不是非常精確,因為有些中文的標點符號比如:,。等等是不能識別的。 以下是比較完善的判斷方法:CharUtil.j

JAVA日期格式轉換各個字母代表含義

日期 日期格式 java 字母 ber aci 天數 bsp stand G Era 標誌符 Text AD y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07 w 年中的周數 Number 27 W