package com.matrix.codeGeneration.plugin; 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.List; /** * 日期格式化,转换工具类 * * @author 姜友瑶 * @createTime 2014.08.30 */ public class DateUtils { public static final String DATE_FORMAT_SS = "yyyy-MM-dd HH:mm:ss"; public static final String DATE_FORMAT_MONGO = "yyyy-MM-dd'T'HH:mm:ss.SSS"; public static final String DATE_FORMAT_STS = "yyyy-MM-dd'T'HH:mm:ss"; public static final String DATE_FORMAT_MM = "yyyy-MM-dd HH:mm"; public static final String DATE_FORMAT_HH = "yyyy-MM-dd HH"; public static final String DATE_FORMAT_DD = "yyyy-MM-dd"; public static final String DATE_FORMAT_SPLITE_DD = "yyyy.MM.dd"; public static final String DATE_FORMAT_NO_SPLITE_DD = "yyyyMMdd"; public static final String DATE_FORMAT_MM_NO_DD = "yyyyMM"; public static final String DATE_FORMAT_NO_SPLITE_MM = "yyyyMMddHHmm"; public static final String DATE_FORMAT_NO_SPLITE_MM_HH = "yyyyMMddHH"; public static final String YEAR = "yyyy"; public static final String DATE_FORMAT_MMDD = "M月d日"; public static final String DATE_FORMAT_WEEK = "星期"; public static final String DATE_TIME_MORNING = "早上"; public static final String DATE_TIME_AFTERNOON = "下午"; public static final String DATE_TIME_NIGHT = "晚上"; public static final String CENTRE_SCRIBING = "-"; protected static final String EMPTY = ""; protected static final String ZERO = "0"; protected static final String SPLITE_CHAR = ":"; protected static final String START_TIME = " 00:00:00";// 空格不能删除 protected static final String END_TIME = " 23:59:59";// 空格不能删除 protected static final int WEEK_DAYS = 7; public static String yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd HH:mm:ss"; protected static final String[] weeks = { "一", "二", "三", "四", "五", "六", "日" }; /** * 返回年份 * * @param date * 日期 * @return 返回年份 */ public static int getYear(java.util.Date date) { try { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTime(date); return c.get(java.util.Calendar.YEAR); } catch (Exception e) { } return 0; } /** * 返回月份 * * @param date * 日期 * @return 返回月份 */ public static int getMonth(java.util.Date date) { try { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTime(date); return c.get(java.util.Calendar.MONTH) + 1; } catch (Exception e) { } return 0; } /** * 日期转字符串 * * @param date * @param format * @return */ public static String dateToString(Date date, String format) { if (date == null) { return EMPTY; } DateFormat fmt = new SimpleDateFormat(format); return fmt.format(date); } /** * 字符串转日期 * * @param dateStr * @param format * @return */ public static Date stringToDate(String dateStr, String format) { DateFormat fmt = new SimpleDateFormat(format); try { return fmt.parse(dateStr); } catch (ParseException e) { } return null; } /** * 判断给定的日期是一周中的第几天,注意:按照中国的习惯,周日是第七天 * * @param date * @return */ public static int dateToWeek(Date date) { if (date == null) { return 0; } Calendar cal = Calendar.getInstance(); cal.setTime(date); if (cal.get(Calendar.DAY_OF_WEEK) == 1) { return 7; } else { return cal.get(Calendar.DAY_OF_WEEK) - 1; } } public static String dateOfWeek(Date date) { return DATE_FORMAT_WEEK + weeks[dateToWeek(date) - 1]; } /** * 指定时间的下一天 * * @param date * @return */ public static Date nextDate(Date date) { if (date == null) { return date; } Calendar cal = Calendar.getInstance(); try { cal.setTime(date); cal.add(Calendar.DATE, 1); return cal.getTime(); } catch (Exception e) { } return null; } /** * 指定时间的前一天 * * @param date * @return */ public static Date previousDate(Date date) { if (date == null) { return date; } Calendar cal = Calendar.getInstance(); try { cal.setTime(date); cal.add(Calendar.DATE, -1); return cal.getTime(); } catch (Exception e) { } return null; } /** * 指定时间的下N天 * * @param date * @return */ public static Date nextNDate(Date date, int nDay) { if (date == null) { return date; } Calendar cal = Calendar.getInstance(); try { cal.setTime(date); cal.add(Calendar.DATE, nDay); return cal.getTime(); } catch (Exception e) { } return null; } /** * 指定时间的前N天 * * @param date * @return */ public static Date previousNDate(Date date, int nDay) { if (date == null) { return date; } Calendar cal = Calendar.getInstance(); try { cal.setTime(date); cal.add(Calendar.DATE, -nDay); return cal.getTime(); } catch (Exception e) { } return null; } /** * 获取一天的起始时间 * * @param date * @return */ public static Date getStartDate(Date date) { if (date == null) { return date; } DateFormat fmt = new SimpleDateFormat(DATE_FORMAT_DD); String dateStr = fmt.format(date); dateStr = dateStr + START_TIME; fmt = new SimpleDateFormat(DATE_FORMAT_SS); try { return fmt.parse(dateStr); } catch (ParseException e) { } return date; } /** * 获取一天的结束时间 * * @param date * @return */ public static Date getEndDate(Date date) { if (date == null) { return date; } DateFormat fmt = new SimpleDateFormat(DATE_FORMAT_DD); String dateStr = fmt.format(date); dateStr = dateStr + END_TIME; fmt = new SimpleDateFormat(DATE_FORMAT_SS); try { return fmt.parse(dateStr); } catch (ParseException e) { } return date; } /** * currentDat是否在referenceDate日期之前 * * @param referenceDate * @param currentDat * @return */ public static boolean isBeforeDate(Date referenceDate, Date currentDate) { if (currentDate == null) { return false; } if (referenceDate == null) { return true; } return currentDate.before(referenceDate); } /** * currentDat是否在referenceDate日期之后 * * @param referenceDate * @param currentDat * @return */ public static boolean isAffterDate(Date referenceDate, Date currentDate) { if (currentDate == null) { return false; } if (referenceDate == null) { return true; } return currentDate.after(referenceDate); } /** * 判断currentDate是否在startDate和endDate之间,不包括startDate和endDate * * @param startDate * @param endDate * @param currentDate * @return */ public static boolean isDuringDate(Date startDate, Date endDate, Date currentDate) { if (currentDate == null) { return false; } if (isAffterDate(startDate, currentDate) && isBeforeDate(endDate, currentDate)) { return true; } return false; } /** * 获取startDate到endDate之间的星期day(中文星期)不包括startDate和endDate * * @param startDate * @param endDate * @param day * @return */ public static List findDayDuringDate(Date startDate, Date endDate, int day) { List listDate = new ArrayList(); int startDay = dateToWeek(startDate); Date date = null; if (startDay == day) { date = nextNDate(startDate, WEEK_DAYS); } else { date = nextNDate(startDate, day - startDay); } while (isDuringDate(startDate, endDate, date)) { listDate.add(date); date = nextNDate(date, WEEK_DAYS); } return listDate; } /** * date转换成Timestamp * * @param date * @param format * @return */ public static Timestamp dateToTimestamp(Date date, String format) { if (date == null) { return null; } format = DATE_FORMAT_SS; DateFormat fmt = new SimpleDateFormat(format); return Timestamp.valueOf(fmt.format(date)); } /** * 获取早中晚 * * @param time * @return */ public static String getDateTime(int time) { // 早上 if (time == 1) { return DateUtils.DATE_TIME_MORNING; } // 下午 else if (time == 2) { return DateUtils.DATE_TIME_AFTERNOON; } // 晚上 else if (time == 3) { return DateUtils.DATE_TIME_NIGHT; } return null; } /** * 获取早中晚的开始时间 * * @param date * @param time * @return */ public static Date getMeetTimeStart(String date, int time) { // 早上 if (time == 1) { return DateUtils.stringToDate(date + " 06:00", DateUtils.DATE_FORMAT_MM); } // 下午 else if (time == 2) { return DateUtils.stringToDate(date + " 13:00", DateUtils.DATE_FORMAT_MM); } // 晚上 else if (time == 3) { return DateUtils.stringToDate(date + " 19:00", DateUtils.DATE_FORMAT_MM); } return null; } /** * 获取早中晚的结束时间 * * @param date * @param time * @return */ public static Date getMeetTimeEnd(String date, int time) { // 早上 if (time == 1) { return DateUtils.stringToDate(date + " 13:00", DateUtils.DATE_FORMAT_MM); } // 下午 else if (time == 2) { return DateUtils.stringToDate(date + " 19:00", DateUtils.DATE_FORMAT_MM); } // 晚上 else if (time == 3) { return DateUtils.stringToDate(date + " 23:00", DateUtils.DATE_FORMAT_MM); } return null; } /** * 得到几天前的时间 * * @param d * @param day * @return */ public static Timestamp getDateBefore(Date d, int day) { Calendar now = Calendar.getInstance(); now.setTime(d); now.set(Calendar.DATE, now.get(Calendar.DATE) - day); return new Timestamp(now.getTime().getTime()); } /** * 得到几天后的时间 * * @param d * @param day * @return */ public static Timestamp getDateAfter(Date d, int day) { Calendar now = Calendar.getInstance(); now.setTime(d); now.set(Calendar.DATE, now.get(Calendar.DATE) + day); return new Timestamp(now.getTime().getTime()); } /** * 将日期类型格式化成字符串 * * @param date * @return 格式化后日期字符串 * @throws ParseException */ public static String dateFormatStr(Date date, String dateStyle) { String dateStr = null; if (date != null) { SimpleDateFormat sdf = new SimpleDateFormat(dateStyle); dateStr = sdf.format(date); } return dateStr; } /** * 获取时间戳 * * @return */ public static String getTimeMark() { Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int mouth = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); int second = c.get(Calendar.SECOND); int haomiao = c.get(Calendar.MILLISECOND); return "" + year + mouth + day + hour + minute + second + haomiao; } }