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;
/**
* 時(shí)間工具類
* @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日";?
? ? // ==格式到年月日 時(shí)分 ==?
? ? /**
? ? * 日期格式巢掺,年月日時(shí)分,例如:200506301210劲蜻,200808081210
? ? */?
? ? public static final String DATE_FORMAT_YYYYMMDDHHmm = "yyyyMMddHHmm";?
? ? /**
? ? * 日期格式陆淀,年月日時(shí)分,例如:20001230 12:00先嬉,20080808 20:08
? ? */?
? ? public static final String DATE_TIME_FORMAT_YYYYMMDD_HH_MI = "yyyyMMdd HH:mm";?
? ? /**
? ? * 日期格式轧苫,年月日時(shí)分,例如: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";?
? ? // ==格式到年月日 時(shí)分秒==?
? ? /**
? ? * 日期格式浸剩,年月日時(shí)分秒钾军,例如:20001230120000鳄袍,20080808200808
? ? */?
? ? public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISS = "yyyyMMddHHmmss";?
? ? /**
? ? * 日期格式,年月日時(shí)分秒吏恭,年月日用橫杠分開拗小,時(shí)分秒用冒號(hào)分開
? ? * 例如: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";?
? ? // ==格式到年月日 時(shí)分秒 毫秒==?
? ? /**
? ? * 日期格式樱哼,年月日時(shí)分秒毫秒哀九,例如:20001230120000123剿配,20080808200808456
? ? */?
? ? public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS = "yyyyMMddHHmmssSSS";?
? ? // ==特殊格式==?
? ? /**
? ? * 日期格式,月日時(shí)分阅束,例如: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;?
? ? }?
? ? /**
? ? * 獲取某日期的日數(shù)
? ? * @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時(shí)間
? ? * @param time Date類型時(shí)間
? ? * @param timeFromat String類型格式
? ? * @return 格式化后的字符串
? ? */?
? ? public static String parseDateToStr(Date time, String timeFromat){?
? ? ? ? DateFormat dateFormat=new SimpleDateFormat(timeFromat);?
? ? ? ? return dateFormat.format(time);?
? ? }?
? ? /**
? ? * 格式化Timestamp時(shí)間
? ? * @param timestamp Timestamp類型時(shí)間
? ? * @param timeFromat
? ? * @return 格式化后的字符串
? ? */?
? ? public static String parseTimestampToStr(Timestamp timestamp,String timeFromat){?
? ? ? ? SimpleDateFormat df = new SimpleDateFormat(timeFromat);?
? ? ? ? return df.format(timestamp);?
? ? }?
? ? /**
? ? * 格式化Date時(shí)間
? ? * @param time Date類型時(shí)間
? ? * @param timeFromat String類型格式
? ? * @param defaultValue 默認(rèn)值為當(dāng)前時(shí)間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時(shí)間
? ? * @param time Date類型時(shí)間
? ? * @param timeFromat String類型格式
? ? * @param defaultValue 默認(rèn)時(shí)間值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時(shí)間
? ? * @param time String類型時(shí)間
? ? * @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時(shí)間
? ? * @param strTime String類型時(shí)間
? ? * @param timeFromat String類型格式
? ? * @param defaultValue 異常時(shí)返回的默認(rèn)值
? ? * @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;?
? ? ? ? }?
? ? }?
? ? /**
? ? * 當(dāng)strTime為2008-9時(shí)返回為2008-9-1 00:00格式日期時(shí)間呼胚,無法轉(zhuǎn)換返回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;?
? ? }?
? ? /**
? ? * 解析兩個(gè)日期之間的所有月份
? ? * @param beginDateStr 開始日期,至少精確到y(tǒng)yyy-MM
? ? * @param endDateStr 結(jié)束日期息裸,至少精確到y(tǒng)yyy-MM
? ? * @return yyyy-MM日期集合
? ? */? ?
? ? public static List<String> getMonthListOfDate(String beginDateStr, String endDateStr) {? ?
? ? ? ? // 指定要解析的時(shí)間格式? ?
? ? ? ? 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);? ?
? ? ? ? ? ? // 設(shè)置日歷? ?
? ? ? ? ? ? beginGC = new GregorianCalendar();? ?
? ? ? ? ? ? beginGC.setTime(beginDate);? ?
? ? ? ? ? ? endGC = new GregorianCalendar();? ?
? ? ? ? ? ? endGC.setTime(endDate);? ?
? ? ? ? ? ? // 直到兩個(gè)時(shí)間相同? ?
? ? ? ? ? ? while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {? ?
? ? ? ? ? ? ? ? sRet = beginGC.get(Calendar.YEAR) + "-"? ?
? ? ? ? ? ? ? ? ? ? ? ? + (beginGC.get(Calendar.MONTH) + 1);? ?
? ? ? ? ? ? ? ? list.add(sRet);? ?
? ? ? ? ? ? ? ? // 以月為單位蝇更,增加時(shí)間? ?
? ? ? ? ? ? ? ? beginGC.add(Calendar.MONTH, 1);? ?
? ? ? ? ? ? }? ?
? ? ? ? ? ? return list;? ?
? ? ? ? } catch (Exception e) {? ?
? ? ? ? ? ? e.printStackTrace();? ?
? ? ? ? ? ? return null;? ?
? ? ? ? }? ?
? ? }? ?
? ? /**?
? ? * 解析兩個(gè)日期段之間的所有日期
? ? * @param beginDateStr 開始日期? ,至少精確到y(tǒng)yyy-MM-dd
? ? * @param endDateStr 結(jié)束日期? 呼盆,至少精確到y(tǒng)yyy-MM-dd
? ? * @return yyyy-MM-dd日期集合
? ? */? ?
? ? public static List<String> getDayListOfDate(String beginDateStr, String endDateStr) {? ?
? ? ? ? // 指定要解析的時(shí)間格式? ?
? ? ? ? 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);? ?
? ? ? ? ? ? // 設(shè)置日歷? ?
? ? ? ? ? ? beginGC = Calendar.getInstance();? ?
? ? ? ? ? ? beginGC.setTime(beginDate);? ?
? ? ? ? ? ? endGC = Calendar.getInstance();? ?
? ? ? ? ? ? endGC.setTime(endDate);? ?
? ? ? ? ? ? SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");? ?
? ? ? ? ? ? // 直到兩個(gè)時(shí)間相同? ?
? ? ? ? ? ? while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {? ?
? ? ? ? ? ? ? ? list.add(sdf.format(beginGC.getTime()));? ?
? ? ? ? ? ? ? ? // 以日為單位年扩,增加時(shí)間? ?
? ? ? ? ? ? ? ? beginGC.add(Calendar.DAY_OF_MONTH, 1);? ?
? ? ? ? ? ? }? ?
? ? ? ? ? ? return list;? ?
? ? ? ? } catch (Exception e) {? ?
? ? ? ? ? ? e.printStackTrace();? ?
? ? ? ? ? ? return null;? ?
? ? ? ? }? ?
? ? }? ?
? ? /**
? ? * 獲取當(dāng)下年份指定前后數(shù)量的年份集合
? ? * @param before 當(dāng)下年份前年數(shù)
? ? * @param behind 當(dāng)下年份后年數(shù)
? ? * @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;? ?
? ? }?
? ? /**?
? ? * 獲取當(dāng)前日期是一年中第幾周?
? ? * @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);? ?
? ? }?
? ? /**
? ? * 獲取某一年各星期的始終時(shí)間
? ? * 實(shí)例: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;? ?
? ? }? ?
? ? /**?
? ? * 獲取某一年的總周數(shù)?
? ? * @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 目標(biāo)年份
? ? * @param week 目標(biāo)周數(shù)
? ? * @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 目標(biāo)年份
? ? * @param week 目標(biāo)周數(shù)
? ? * @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 目標(biāo)年份
? ? * @param month 目標(biāo)月份
? ? * @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 目標(biāo)年份
? ? * @param month 目標(biāo)月份
? ? * @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();? ?
? ? }? ?
? ? /**?
? ? * 獲取某個(gè)日期為星期幾?
? ? * @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];?
? ? }? ?
? ? /**
? ? * 獲得指定日期的星期幾數(shù)
? ? * @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;?
? ? }?
? ? /**
? ? * 驗(yàn)證字符串是否為日期
? ? * 驗(yàn)證格式:YYYYMMDD访圃、YYYY_MM_DD厨幻、YYYYMMDDHHMISS、YYYYMMDD_HH_MI腿时、YYYY_MM_DD_HH_MI况脆、YYYYMMDDHHMISSSSS、YYYY_MM_DD_HH_MI_SS
? ? * @param strTime
? ? * @return null時(shí)返回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;?
? ? }?
? ? /**
? ? * 將指定日期的時(shí)分秒格式為零
? ? * @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();?
? ? }?
? ? /**
? ? * 獲得指定時(shí)間加減參數(shù)后的日期(不計(jì)算則輸入0)?
? ? * @param date 指定日期
? ? * @param year 年數(shù)漠另,可正可負(fù)
? ? * @param month 月數(shù),可正可負(fù)
? ? * @param day 天數(shù)跃赚,可正可負(fù)
? ? * @param hour 小時(shí)數(shù)笆搓,可正可負(fù)
? ? * @param minute 分鐘數(shù),可正可負(fù)
? ? * @param second 秒數(shù)纬傲,可正可負(fù)
? ? * @param millisecond 毫秒數(shù)满败,可正可負(fù)
? ? * @return 計(jì)算后的日期
? ? */?
? ? 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);//加減年數(shù)?
? ? ? ? c.add(Calendar.MONTH, month);//加減月數(shù)?
? ? ? ? c.add(Calendar.DATE, day);//加減天數(shù)?
? ? ? ? c.add(Calendar.HOUR,hour);//加減小時(shí)數(shù)?
? ? ? ? c.add(Calendar.MINUTE, minute);//加減分鐘數(shù)?
? ? ? ? c.add(Calendar.SECOND, second);//加減秒?
? ? ? ? c.add(Calendar.MILLISECOND, millisecond);//加減毫秒數(shù)?
? ? ? ? return c.getTime();?
? ? }?
? ? /**
? ? * 獲得兩個(gè)日期的時(shí)間戳之差
? ? * @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;?
? ? }?
? ? /**
? ? * 判斷二個(gè)時(shí)間是否為同年同月
? ? * @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;?
? ? }?
? ? /**?
? ? * 獲得兩個(gè)時(shí)間相差距離多少天多少小時(shí)多少分多少秒?
? ? * @param str1 時(shí)間參數(shù) 1 格式:1990-01-01 12:00:00?
? ? * @param str2 時(shí)間參數(shù) 2 格式:2009-01-01 12:00:00?
? ? * @return long[] 返回值為:{天, 時(shí), 分, 秒}?
? ? */?
? ? 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;?
? ? }?
? ? /**?
? ? * 兩個(gè)時(shí)間相差距離多少天多少小時(shí)多少分多少秒?
? ? * @param str1 時(shí)間參數(shù) 1 格式:1990-01-01 12:00:00?
? ? * @param str2 時(shí)間參數(shù) 2 格式:2009-01-01 12:00:00?
? ? * @return String 返回值為:{天, 時(shí), 分, 秒}
? ? */?
? ? 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;?
? ? }?
? ? /**?
? ? * 兩個(gè)時(shí)間之間相差距離多少天?
? ? * @param one 時(shí)間參數(shù) 1:?
? ? * @param two 時(shí)間參數(shù) 2:?
? ? * @return 相差天數(shù)?
? ? */?
? ? 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;?
? ? }?
? ? /**
? ? * 獲取指定時(shí)間的那天 00:00:00.000 的時(shí)間
? ? * @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();?
? ? }?
? ? /**
? ? * 獲取指定時(shí)間的那天 23:59:59.999 的時(shí)間
? ? * @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?
? ? ? ? }?
? ? }? */
}?