日期工具類 */ public class DateUtils {ui
private static final Logger log = LoggerFactory.getLogger(DateUtils.class); /**.net
- 一分鐘的秒數 */ public static final int SECONDS_ONE_MINUTE = 60;
/**code
- 一秒的毫秒數 */ public static final int MILLISECONDS_ONE_SECOND = 1000;
/**orm
- 一小時的秒數 */ public static final int SECONDS_ONE_HOUR = 60 * SECONDS_ONE_MINUTE;
/**對象
- 一天的秒數 / public static final int SECONDS_ONE_DAY = 24 * SECONDS_ONE_HOUR; /*
- 一天的毫秒數 */ public static final int MILL_SECONDS_ONE_DAY = 24 * SECONDS_ONE_HOUR;
private static String defaultDatePattern = null;字符串
private static String DEFAULT_FORMAT = "yyyy-MM-dd";
private static final Date checkSinceDate = getCheckSinceDate("20160301");
public static final String YYYYMMDDHHNNSS_FORMAT = "yyyyMMddHHmmss";
public static final String YYYY_MM_DD_HH_NN_SS_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
-
根據inFmt的樣式,日期時間字符串轉化爲日期時間對象
-
@param datestr String 日期時間字符串,如:2004100一、2004年10月01日 15:03
-
@param dateConst 時間格式的類型
-
@return Date 日期時間對象,格式inFmt非法時,使用yyyyMMdd格式
-
@throws ParseException 當datestr不能格式化爲inFmt格式時拋出此異常 */ public static Date getDate(String datestr, DateConst dateConst) { if (null == datestr || "".equals(datestr.trim())) { return null; }
String inFmt = "yyyyMMdd"; if (null != dateConst) { // inFmt非法 inFmt = dateConst.getDesc(); }
Date inDate = null;
// 依據inFmt格式把日期字符串轉化爲日期對象 SimpleDateFormat inDateFormat = new SimpleDateFormat(inFmt); inDateFormat.setLenient(true); try { inDate = inDateFormat.parse(datestr); } catch (ParseException e) { log.info(e.getMessage()); } inDateFormat = null; return inDate; }
public static int getIntervalMinute(Date startDate, Date endDate) { long startdate = startDate.getTime(); long enddate = endDate.getTime(); long interval = enddate - startdate; int intervalNum = (int) (interval / (1000 * 60)); return intervalNum; }
/**
- 只比較日期, 時分秒忽略,
- @param baseDate 基準日期
- @param date2 用於比較的日期
- @return 0 表示, 一樣的日期, 1 表示 日期1 在日期2 後, -1 表示日期1 在日期2 前 */ public static int compareDate(Date baseDate, Date date2) { GregorianCalendar calendar1 = new GregorianCalendar(); calendar1.setTime(baseDate); calendar1.set(Calendar.AM_PM, 0); calendar1.set(Calendar.HOUR, 0); calendar1.set(Calendar.MINUTE, 0); calendar1.set(Calendar.SECOND, 0); calendar1.set(Calendar.MILLISECOND, 0); GregorianCalendar calendar2 = new GregorianCalendar(); calendar2.setTime(date2); calendar2.set(Calendar.AM_PM, 0); calendar2.set(Calendar.HOUR, 0); calendar2.set(Calendar.MINUTE, 0); calendar2.set(Calendar.SECOND, 0); calendar2.set(Calendar.MILLISECOND, 0); return calendar1.compareTo(calendar2); }
/**
- 返回預設Format的當前日期字符串 */ public static String getTodayStr() { Date today = new Date(); return format(today); }
/**
- 使用預設Format格式化Date成字符串yyyy-mm-dd */ public static String format(Date date) { return date == null ? "" : format(date, getDatePattern()); }
/**
- 使用參數Format格式化Date成字符串 yyyy-mm-dd */ public static String format(Date date, String pattern) { return date == null ? "" : new SimpleDateFormat(pattern).format(date); }
/**
-
Return default datePattern (yyyy-MM-dd)
-
@return a string representing the date pattern on the UI */ public static String getDatePattern() { try { defaultDatePattern = "yyyy-MM-dd"; } catch (MissingResourceException mse) { defaultDatePattern = "yyyy-MM-dd"; }
return defaultDatePattern; }
public static String formatToDateStart(String date) { if (null == date) { return null; } return date + " 00:00:00"; }
public static String formatToDateEnd(String date) { if (null == date) { return null; } return date + " 23:59:59"; }
/**
- 解析格式爲yyyy-MM-dd時間
- @param dateStr
- @return */ public static Date parseDate(String dateStr) { return parseDate(dateStr, DEFAULT_FORMAT); }
/**
- 根據所給格式將字符串轉爲日期
- @param dateStr
- @param formater
- @return */ public static Date parseDate(String dateStr, String formater) { SimpleDateFormat format = new SimpleDateFormat(); format.applyPattern(formater); try { return format.parse(dateStr); } catch (ParseException e) { log.error("parse date string error", e); } return null; }
public static Date getNextDay(int days) { Date date = new Date();//取時間 Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(calendar.DATE, days);//把日期日後增長一天.整數日後推,負數往前移動 date = calendar.getTime(); //這個時間就是日期日後推一天的結果
return date; }
/**
- add by zengshibin 2015-04-22
- 獲取偏移X天后的某個時間 */ public static Date getNextDateTime(int days, int hours, int minute, int seconds) { try { Calendar cd = Calendar.getInstance(); cd.setTime(new Date()); cd.add(Calendar.DATE, days);// 增長一天 cd.set(Calendar.HOUR_OF_DAY, hours); cd.set(Calendar.MINUTE, minute); cd.set(Calendar.SECOND, seconds); Date date = cd.getTime(); return date; } catch (Exception e) { return new Date(); } }
/**
- 獲取指定格式的當前日期串 */ public static String getCurrentDateStr(String formate) { Date today = new Date(); if (null == formate) { formate = "yyyy-MM-dd HH:mm:ss"; } SimpleDateFormat sf = new SimpleDateFormat(formate); return sf.format(today); }
/**
- add by zengshibin 2015-12-6
- 獲取偏移後的某個時間 */ public static Date getSubDateTime(int days, int hours, int minute, int seconds) { try { Calendar cd = Calendar.getInstance(); cd.setTime(new Date()); cd.add(Calendar.DATE, -days);// 增長一天 cd.add(Calendar.HOUR_OF_DAY, -hours); cd.add(Calendar.MINUTE, -minute); cd.add(Calendar.SECOND, -seconds); Date date = cd.getTime(); return date; } catch (Exception e) { return new Date(); } }
/**
- add by zengshibin 2016-01-26
- 設置日期的時分秒 */ public static Date setDateHMS(Date date, int hours, int minutes, int seconds) { try { Calendar cd = Calendar.getInstance(); cd.setTime(date); cd.set(Calendar.HOUR, hours); cd.set(Calendar.MINUTE, minutes); cd.set(Calendar.SECOND, seconds); return cd.getTime(); } catch (Exception e) { return new Date(); } }
/**
- add by zengshibin 2016-03-01 獲取 時間按天位移後的日期字符串 */ public static String getAddDaysStr(String formate, int days) { Date date = getNextDay(days); if (null == formate) { formate = "yyyy-MM-dd HH:mm:ss"; } SimpleDateFormat sf = new SimpleDateFormat(formate); return sf.format(date); }
/**
- 獲取傳入日期的前一天
- @return */ public static Date getPreDate(Date date) { return DateUtils.getFrontDate(date, 1); }
/**
- 獲取傳入日期的前N天
- @param date
- @param days
- @return */ public static Date getFrontDate(Date date, int days) { Calendar cd = Calendar.getInstance(); cd.setTime(date); cd.set(Calendar.DAY_OF_YEAR, cd.get(Calendar.DAY_OF_YEAR) - days); return cd.getTime(); }
/**
- add by zengshibin 2016-03-21
- 獲取偏移X天后的凌晨時間 */ public static Date getNextDateZeroTime(int days) { try { Calendar cd = Calendar.getInstance(); cd.setTime(new Date()); cd.set(Calendar.AM_PM, 0); cd.add(Calendar.DATE, days);// 增長一天 cd.set(Calendar.HOUR_OF_DAY, 0); cd.set(Calendar.MINUTE, 0); cd.set(Calendar.SECOND, 0); cd.set(Calendar.MILLISECOND, 0); Date date = cd.getTime(); return date; } catch (Exception e) { return new Date(); } }
public static Date addDay(Date date, int days) { if (date == null) { date = new Date(); } Calendar calendar = Calendar.getInstance(); calendar.setTime(date);
calendar.add(Calendar.DAY_OF_YEAR, days);
return calendar.getTime();
}
/**
- 獲取傳入日期所在周的週一
- @param date
- @return */ public static Date getMondayOfWeek(Date date) { Calendar ins = Calendar.getInstance(); ins.setTime(date); ins.add(Calendar.DAY_OF_MONTH, -1);//解決週日會出現 併到下一週的狀況 ins.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return ins.getTime(); }
/**
- 獲取傳入日期所在周的週日
- @param date
- @return */ public static Date getSundayOfWeek(Date date) { Date monday = DateUtils.getMondayOfWeek(date); Calendar ins = Calendar.getInstance(); ins.setTime(monday); ins.add(Calendar.DAY_OF_YEAR, 6); return ins.getTime(); }
/**
- 獲取傳入日期所在月的第一天
- @param date
- @return */ public static Date getFistDayOfMonth(Date date) { Calendar ins = Calendar.getInstance(); ins.setTime(date); ins.set(Calendar.DAY_OF_MONTH, 1); return ins.getTime(); }
/**
- 獲取傳入日期所在月的最後一天
- @param date
- @return */ public static Date getLastDayOfMonth(Date date) { Calendar ins = Calendar.getInstance(); ins.setTime(date); ins.set(Calendar.DAY_OF_MONTH, ins.getActualMaximum(Calendar.DAY_OF_MONTH)); return ins.getTime(); }
/**
- 獲得本季度第一天的日期
- @return Date
- @Methods Name getFirstDayOfQuarter */ public static Date getFirstDayOfSeason(Date date) { Calendar cDay = Calendar.getInstance(); cDay.setTime(date); int curMonth = cDay.get(Calendar.MONTH); if (curMonth >= Calendar.JANUARY && curMonth <= Calendar.MARCH) { cDay.set(Calendar.MONTH, Calendar.JANUARY); } if (curMonth >= Calendar.APRIL && curMonth <= Calendar.JUNE) { cDay.set(Calendar.MONTH, Calendar.APRIL); } if (curMonth >= Calendar.JULY && curMonth <= Calendar.AUGUST) { cDay.set(Calendar.MONTH, Calendar.JULY); } if (curMonth >= Calendar.OCTOBER && curMonth <= Calendar.DECEMBER) { cDay.set(Calendar.MONTH, Calendar.OCTOBER); } cDay.set(Calendar.DAY_OF_MONTH, cDay.getActualMinimum(Calendar.DAY_OF_MONTH)); return cDay.getTime(); }
/**
- 獲得本季度最後一天的日期
- @return Date
- @Methods Name getLastDayOfQuarter */ public static Date getLastDayOfSeason(Date date) { Calendar cDay = Calendar.getInstance(); cDay.setTime(date); int curMonth = cDay.get(Calendar.MONTH); if (curMonth >= Calendar.JANUARY && curMonth <= Calendar.MARCH) { cDay.set(Calendar.MONTH, Calendar.MARCH); } if (curMonth >= Calendar.APRIL && curMonth <= Calendar.JUNE) { cDay.set(Calendar.MONTH, Calendar.JUNE); } if (curMonth >= Calendar.JULY && curMonth <= Calendar.AUGUST) { cDay.set(Calendar.MONTH, Calendar.AUGUST); } if (curMonth >= Calendar.OCTOBER && curMonth <= Calendar.DECEMBER) { cDay.set(Calendar.MONTH, Calendar.DECEMBER); } cDay.set(Calendar.DAY_OF_MONTH, cDay.getActualMaximum(Calendar.DAY_OF_MONTH)); return cDay.getTime(); }
/**
- 獲取傳入日期所在年份的第一天
- @param date
- @return */ public static Date getFirstDayOfYear(Date date) { Calendar ins = Calendar.getInstance(); ins.setTime(date); int year = ins.get(Calendar.YEAR); ins.clear(); ins.set(Calendar.YEAR, year); return ins.getTime(); }
/**
- 獲取傳入日期所在年份的最後一天
- @param date
- @return */ public static Date getLastDayOfYear(Date date) { Calendar ins = Calendar.getInstance(); ins.setTime(date); int year = ins.get(Calendar.YEAR); ins.clear(); ins.set(Calendar.YEAR, year); ins.roll(Calendar.DAY_OF_YEAR, -1); return ins.getTime(); }
public static List<Map<String, Object>> bulidQueryDateItem() { List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); Date today = new Date(); Map<String, Object> yesterday = new HashMap<String, Object>(); yesterday.put("item", "昨日"); yesterday.put("startDate", DateUtils.format(DateUtils.getPreDate(today))); yesterday.put("endDate", DateUtils.format(DateUtils.getPreDate(today))); yesterday.put("active", true); result.add(yesterday); Map<String, Object> week = new HashMap<String, Object>(); week.put("item", "本週"); week.put("startDate", DateUtils.format(DateUtils.getMondayOfWeek(today))); week.put("endDate", DateUtils.format(DateUtils.getSundayOfWeek(today))); result.add(week); Map<String, Object> month = new HashMap<String, Object>(); month.put("item", "本月"); month.put("startDate", DateUtils.format(DateUtils.getFistDayOfMonth(today))); month.put("endDate", DateUtils.format(DateUtils.getLastDayOfMonth(today))); result.add(month); Map<String, Object> season = new HashMap<String, Object>(); season.put("item", "本季"); season.put("startDate", DateUtils.format(DateUtils.getFirstDayOfSeason(today))); season.put("endDate", DateUtils.format(DateUtils.getLastDayOfSeason(today))); result.add(season); Map<String, Object> year = new HashMap<String, Object>(); year.put("item", "本年"); year.put("startDate", DateUtils.format(DateUtils.getFirstDayOfYear(today))); year.put("endDate", DateUtils.format(DateUtils.getLastDayOfYear(today))); result.add(year); return result; }
/**
- @return */ public static List<Integer> buildNext6DayNum() { List<Integer> days = new ArrayList<Integer>(); days.add(6); days.add(5); days.add(4); days.add(3); days.add(2); days.add(1); return days; }
public static Date getDefaultExpireDate() { Calendar cDay = Calendar.getInstance(); cDay.set(Calendar.YEAR, 2037); cDay.set(Calendar.MONTH, Calendar.JANUARY); cDay.set(Calendar.DAY_OF_MONTH, cDay.getActualMinimum(Calendar.DAY_OF_MONTH)); return cDay.getTime(); }
private static Date getCheckSinceDate(String dateStr) { Date date = null; try { date = getDate(dateStr, null); } catch (Exception e) { log.error("日期轉換錯誤:", e); } return date; }
/**
- 獲取對帳開始日期,當前爲2016-03-01,以前的數據都不獲取
- @return */ public static Date getCheckSinceDate() { return checkSinceDate; }
/**
- 將日期轉換成相應字符串,日期爲空則返回空串
- @param baseDate
- @param formate
- @return */ public static String getDateStrByFormate(Date baseDate, String formate) { if (null == baseDate) { return null; } if (StringUtils.isEmpty(formate)) { formate = "yyyy-MM-dd HH:mm:ss"; } SimpleDateFormat sf = new SimpleDateFormat(formate); try { Calendar cd = Calendar.getInstance(); cd.setTime(baseDate); Date date = cd.getTime(); return sf.format(date); } catch (Exception e) { return sf.format(baseDate); } }
/**
- 將字符串轉成日期,日期爲空則返回空
- @param dateStr
- @param format
- @return */ public static Date formateStrToDate(String dateStr, String format) { if (StringUtils.isEmpty(dateStr)) { return null; } if (StringUtils.isEmpty(format)) { format = YYYY_MM_DD_HH_NN_SS_FORMAT; } SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format); Date date = null; try { date = simpleDateFormat.parse(dateStr); } catch (ParseException e) { log.error("字符串轉化日期失敗!" + e.getMessage(), e); } return date; }
/**
- 獲取偏移後的時間,如指定時間的1天2小時30分鐘後
- @param baseDate
- @param days
- @param hours
- @param minute
- @param seconds
- @return */ public static Date getTimeAfterAddTime(Date baseDate, int days, int hours, int minute, int seconds) { try { Calendar cd = Calendar.getInstance(); cd.setTime(baseDate); cd.add(Calendar.DATE, days); cd.add(Calendar.HOUR_OF_DAY, hours); cd.add(Calendar.MINUTE, minute); cd.add(Calendar.SECOND, seconds); Date date = cd.getTime(); return date; } catch (Exception e) { return new Date(); } }
/**
-
根據傳入的時間 獲取添加月份後的實時間
-
若是是最後一天 --都按照最後一天
-
若是這個天數 大於其餘的天數 就取最大天數
-
@param month
-
@param now
-
@return */ public static String getAdMonthStr(Integer month, Date now) { log.info("now=" + new SimpleDateFormat(DateConst.HYPHEN_DISPLAY_DATE.getDesc()).format(now) + "\tmonth=" + month); String result = ""; Calendar nowCal = getCalendar(now); int dayNow = nowCal.get(Calendar.DATE);//獲取日 String nowStr = new SimpleDateFormat(DateConst.HYPHEN_DISPLAY_DATE.getDesc()).format(now);
nowCal.set(Calendar.DAY_OF_MONTH, 1); nowCal.roll(Calendar.DAY_OF_MONTH, -1); int dayLast = nowCal.get(Calendar.DATE);//獲取日 Date nowLast = nowCal.getTime(); String nowLastStr = new SimpleDateFormat(DateConst.HYPHEN_DISPLAY_DATE.getDesc()).format(nowLast);
Calendar addCal = getCalendar(now); int dayAddNow = addCal.get(Calendar.DATE);//獲取日 addCal.add(Calendar.MONTH, month); Date add = addCal.getTime(); String addStr = new SimpleDateFormat(DateConst.HYPHEN_DISPLAY_DATE.getDesc()).format(add);
addCal.set(Calendar.DAY_OF_MONTH, 1); addCal.roll(Calendar.DAY_OF_MONTH, -1); int dayAddLast = addCal.get(Calendar.DATE);//獲取日 Date addLast = addCal.getTime(); String addLastStr = new SimpleDateFormat(DateConst.HYPHEN_DISPLAY_DATE.getDesc()).format(addLast);
//其餘都正常計算 result = addStr; //若是這個天數 大於其餘的天數 就取最大天數 if (dayNow > dayAddLast) { result = addLastStr; } //若是是最後一天 --都按照最後一天 if (dayNow == dayLast) { result = addLastStr; } log.info("\t當前時間\t" + nowStr + "\tdayNow\t" + dayNow); log.info("\t當前時間月尾\t" + nowLastStr + "\tdayLast\t" + dayLast); log.info("\t加上月份後時間\t" + addStr + "\tdayAddNow\t" + dayAddNow); log.info("\t加上月份後月尾\t" + addLastStr + "\tdayAddLast\t" + dayAddLast);
log.info("最後結果是" + result); return result; }
private static Calendar getCalendar(Date now) { Calendar nowCal = Calendar.getInstance(); nowCal.setTime(now); nowCal.set(Calendar.HOUR_OF_DAY, 0); nowCal.set(Calendar.MINUTE, 0); nowCal.set(Calendar.SECOND, 0); nowCal.set(Calendar.MILLISECOND, 0); return nowCal; }
/**
- 添加天數
- @param days
- @return */ public static String getAddDayStr(Integer days, Date fromTime) { Calendar calendar = getCalendar(days, fromTime); Date delayTime = calendar.getTime(); return new SimpleDateFormat(DateConst.HYPHEN_DISPLAY_DATE.getDesc()).format(delayTime); }
private static Calendar getCalendar(Integer days, Date fromTime) { Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.setTime(fromTime); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); calendar.add(Calendar.DATE, days); return calendar; }
public static Date toFromDate(Date date) { if (null == date) { return toFromDate(new Date()); } String curYMD = format(date, DateConst.HYPHEN_DISPLAY_DATE.getDesc()); String beginDate = curYMD + " 00:00:00"; return getDate(beginDate, DateConst.HYPHEN_DISPLAY_TIME); }
public static Date toEndDate(Date date) { if (null == date) { return toEndDate(new Date()); } String curYMD = format(date, DateConst.HYPHEN_DISPLAY_DATE.getDesc()); String endDate = curYMD + " 23:59:59"; return getDate(endDate, DateConst.HYPHEN_DISPLAY_TIME); }
public static String toFromStr(Date date) { if (null == date) { return ""; } String curYMD = format(date, DateConst.HYPHEN_DISPLAY_DATE.getDesc()); String beginDate = curYMD + " 00:00:00"; return beginDate; }
public static String toEndStr(Date date) { if (null == date) { return ""; } String curYMD = format(date, DateConst.HYPHEN_DISPLAY_DATE.getDesc()); String endDate = curYMD + " 23:59:59"; return endDate; }