package com.vci.dbsync.utils; import java.io.IOException; import java.math.BigDecimal; import java.net.URL; 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.List; import java.util.Locale; import java.util.Map; import java.util.TimeZone; /** * 自定义时间日期工具 * * @author liuyazhuang * */ public class DateUtils { /** * 周一的日期 */ public static final String MONDAY_DATE = "monday_date"; /** * 周日的日期 */ public static final String SUNDAY_DATE = "sunday_date"; public static final String MONTH_FIRST = "month_first"; public static final String MONTH_LAST = "month_last"; public static final String MONTH_SINGLE = "MM"; public static final String DATE_SINGLE = "dd"; public static final String DATE_FORMAT = "yyyy-MM-dd"; public static final String DATE_TIME_NO_FORMAT = "yyyyMMddHHmmss"; public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String DATE_MINUTE_FORMAT = "yyyy-MM-dd HH:mm"; public static final String MONTH_FORMAT = "yyyy-MM"; public static final String MONTH_NO_FORMAT = "yyyyMM"; public static final String YEAR_FORMAT = "yyyy"; public static final String TIME_FORMAT = "HH:mm:ss"; public static final String MINUTE_FORMAT = "HH:mm"; public static final String BIRTHDAY_FORMAT = "yyyy年MM月dd日"; public static final String DATE_DATE = "yyyyMMdd"; public static final String LOCAL_ENGLISH_FORMAT = "dd/MMM/yyyy:hh:mm:ss Z"; // MySQL数据库Date类型的字段必须赋值一个大于1970年1月1日的日期值。否则对此字段进行where条件查询或order // by等操作时就会报错。 public static final int MYSQL_DATE_YEAR_MAXVALUE = 1970; public enum TimeUnit { Year, Month, Week, Day, Hour, Minute, Second } public enum CouponUnit { Year, Month, Week, Day, Hour, Minute, Second } // 计算两个日期相差年数 public static int yearDateDiff(Date startDate, Date endDate) { Calendar calBegin = Calendar.getInstance(); // 获取日历实例 Calendar calEnd = Calendar.getInstance(); calBegin.setTime(startDate); // 字符串按照指定格式转化为日期 calEnd.setTime(endDate); return calEnd.get(Calendar.YEAR) - calBegin.get(Calendar.YEAR); } /** * 将某一格式的时间转化为另一种格式 * @param timeLocal * @param localFormatStr * @param formatStr * @return */ public static String parse(String timeLocal, String localFormatStr, String formatStr){ Date date = new Date(); try { SimpleDateFormat formatter = new SimpleDateFormat(localFormatStr, Locale.ENGLISH); date = formatter.parse(timeLocal); } catch (Exception e) { date = new Date(); } SimpleDateFormat format = new SimpleDateFormat(formatStr); String dateStr = format.format(date); return dateStr; } /** * 获取与现在相隔param的时间戳,精确到毫秒 * * @param param * @param couponUnit * @return */ public static long getTimeStampFromNow(Integer param, CouponUnit couponUnit) { long timeStamp = 0; switch (couponUnit) { case Year: timeStamp = param * 365 * 24 * 60 * 60 * 1000; break; case Month: timeStamp = param * 30 * 24 * 60 * 60 * 1000; break; case Week: timeStamp = param * 7 * 24 * 60 * 60 * 1000; break; case Day: timeStamp = param * 24 * 60 * 60 * 1000; break; case Hour: timeStamp = param * 60 * 60 * 1000; break; case Minute: timeStamp = param * 60 * 1000; break; case Second: timeStamp = param * 1000; break; default: break; } return timeStamp; } public static Map convertWeekByDate(Date time) { Map map = new HashMap(); Calendar cal = Calendar.getInstance(); cal.setTime(time); // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了 int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天 if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } //System.out.println("要计算日期为:" + sdf.format(cal.getTime())); // 输出要计算日期 cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 String imptimeBegin = parseDateToString(cal.getTime(), DATE_FORMAT); map.put(MONDAY_DATE, imptimeBegin); cal.add(Calendar.DATE, 6); String imptimeEnd = parseDateToString(cal.getTime(), DATE_FORMAT); map.put(SUNDAY_DATE, imptimeEnd); return map; } public static String getLastDayOfMonth(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month-1); cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE)); return parseDateToString(cal.getTime(), DATE_FORMAT); } public static String getFirstDayOfMonth(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month-1); cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE)); return parseDateToString(cal.getTime(), DATE_FORMAT); } /** * 获取指定年份的第一天和最后一天 * @param year * @param month * @return */ public static Map getFirstAndLastDayFromMonth(int year, int month){ Map map = new HashMap(); map.put(MONTH_FIRST, getFirstDayOfMonth(year, month)); map.put(MONTH_LAST, getLastDayOfMonth(year, month)); return map; } public static void main(String[] args) { System.out.println(getDelayTime(parseDateToString(new Date(), DATE_FORMAT), Calendar.DATE, -1, DATE_FORMAT)); } /** * 时间单位设置工具 * * @param date * @param value * @param couponUnit * @return */ public static Date delayTime(Date date, Integer value, CouponUnit couponUnit) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); switch (couponUnit) { case Year: calendar.add(Calendar.YEAR, value); break; case Month: calendar.add(Calendar.MONTH, value); break; case Week: calendar.add(Calendar.DAY_OF_WEEK, value); break; case Day: calendar.add(Calendar.DATE, value); break; case Hour: calendar.add(Calendar.HOUR, value); break; case Minute: calendar.add(Calendar.MINUTE, value); break; case Second: calendar.add(Calendar.SECOND, value); break; default: break; } return calendar.getTime(); } /** * 取得当月天数 */ public static int getCurrentMonthLastDay() { Calendar a = Calendar.getInstance(); a.set(Calendar.DATE, 1);// 把日期设置为当月第一天 a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天 int maxDate = a.get(Calendar.DATE); return maxDate; } /** * 得到指定月的天数 */ public static int getMonthLastDay(int year, int month) { Calendar a = Calendar.getInstance(); a.set(Calendar.YEAR, year); a.set(Calendar.MONTH, month - 1); a.set(Calendar.DATE, 1);// 把日期设置为当月第一天 a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天 int maxDate = a.get(Calendar.DATE); return maxDate; } /** * 时间单位设置工具 * * @param date * @param value * @param couponUnit * @return */ public static Date delayTime(Date date, BigDecimal value, CouponUnit couponUnit) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); switch (couponUnit) { case Year: calendar.add(Calendar.YEAR, value.intValue()); break; case Month: calendar.add(Calendar.MONTH, value.intValue()); break; case Week: calendar.add(Calendar.DAY_OF_WEEK, value.intValue()); break; case Day: calendar.add(Calendar.DATE, value.intValue()); break; case Hour: calendar.add(Calendar.HOUR, value.intValue()); break; case Minute: calendar.add(Calendar.MINUTE, value.intValue()); break; case Second: calendar.add(Calendar.SECOND, value.intValue()); break; default: break; } return calendar.getTime(); } /** * 方向 * * @author liuyazhuang * */ public enum Direction { Previous, After } /** * 将指定格式的时间提前或延迟指定的时间端 * * @param sourceTime:原时间 * @param format:原时间格式 * @param timeLen:提前或延迟的时间段 * @param lenTimeUnit:提前或延迟的时间格式 * @param direction:标志是提前还是延后 * @return 返回format所代表的时间格式字符串 */ public static String changeTime(String sourceTime, String format, Double timeLen, TimeUnit lenTimeUnit, Direction direction) { long source = parseStringDateToDate(sourceTime, format).getTime(); long targetLen = getTimeLen(timeLen, lenTimeUnit); switch (direction) { case Previous: source -= targetLen; break; case After: source += targetLen; break; default: break; } return parseDateToString(new Date(source), format); } /** * 获取距离当前时间days天的时间 * * @param direction:方向 * @param days:距离的天数 * @return */ public static Date getDate(Direction direction, int days) { Calendar calendar = Calendar.getInstance(); switch (direction) { case After: calendar.add(Calendar.DAY_OF_MONTH, days); break; case Previous: calendar.add(Calendar.DAY_OF_MONTH, -days); break; default: break; } return calendar.getTime(); } /** * 获取时间段的毫秒数 * * @param timeLen * @param lenTimeUnit * @return */ private static long getTimeLen(Double timeLen, TimeUnit lenTimeUnit) { long time = 0; switch (lenTimeUnit) { case Week: time = (long) (timeLen * 7 * 24 * 3600 * 1000); break; case Day: time = (long) (timeLen * 24 * 3600 * 1000); break; case Hour: time = (long) (timeLen * 3600 * 1000); break; case Minute: time = (long) (timeLen * 60 * 1000); break; case Second: time = (long) (timeLen * 1000); break; default: break; } return time; } /** * 比较前面的日期比后面的日期大 * * @param firstDate * @param secondDate * @return */ public static boolean compareDate(Date firstDate, Date secondDate) { return firstDate.getTime() >= secondDate.getTime(); } public static String parseDateToString(Date date, String formatString) { return getSimpleDateFormat(formatString).format(date); } public static SimpleDateFormat getSimpleDateFormat(String formatString) { return new SimpleDateFormat(formatString); } /** * 时间单位设置工具 * * @param date * @param value * @param couponUnit * @return */ public static Date delayTime(Date date, BigDecimal value, TimeUnit couponUnit) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); switch (couponUnit) { case Year: calendar.add(Calendar.YEAR, value.intValue()); break; case Month: calendar.add(Calendar.MONTH, value.intValue()); break; case Week: calendar.add(Calendar.DAY_OF_WEEK, value.intValue()); break; case Day: calendar.add(Calendar.DATE, value.intValue()); break; case Hour: calendar.add(Calendar.HOUR, value.intValue()); break; case Minute: calendar.add(Calendar.MINUTE, value.intValue()); break; case Second: calendar.add(Calendar.SECOND, value.intValue()); break; default: break; } return calendar.getTime(); } /** * 获取星期在某一段时间内的日期 * * @param startDate:格式为yyyy-MM-dd * @param endDate格式为yyyy-MM-dd * @param week:1到7代表星期一到星期日 * @return * @throws Exception */ public static List getDaysBetween(Date startDate, Date endDate, int week) throws Exception { List dates = new ArrayList(); // 获取开始日期的星期 int weekDay = getWeekByDate(startDate); // 获取输入的星期与开始时间的星期相隔的天数 int days = (week - weekDay) < 0 ? (week - weekDay) + 7 : week - weekDay; // 获取输入的星期所在日期在时间段内的以一个日期 Calendar calendar = Calendar.getInstance(); calendar.setTime(startDate); calendar.add(Calendar.DATE, days); while (calendar.getTime().getTime() <= endDate.getTime()) { dates.add(calendar.getTime()); calendar.add(Calendar.DATE, Calendar.DAY_OF_WEEK); } return dates; } /** * 获取星期在某一段时间内的日期 * * @param start:格式为yyyy-MM-dd * @param end:格式为yyyy-MM-dd * @param week:数字1到7代表星期一到星期日 * @return * @throws Exception */ public static List getDaysBetween(String start, String end, int week) throws Exception { Date startDate = parseStringDateToDate(start, DATE_FORMAT); Date endDate = parseStringDateToDate(end, DATE_FORMAT); List dates = new ArrayList(); // 获取开始日期的星期 int weekDay = getWeekByDate(startDate); // 获取输入的星期与开始时间的星期相隔的天数 int days = (week - weekDay) < 0 ? (week - weekDay) + 7 : week - weekDay; // 获取输入的星期所在日期在时间段内的以一个日期 Calendar calendar = Calendar.getInstance(); calendar.setTime(startDate); calendar.add(Calendar.DATE, days); while (calendar.getTime().getTime() <= endDate.getTime()) { dates.add(calendar.getTime()); calendar.add(Calendar.DATE, Calendar.DAY_OF_WEEK); } return dates; } /** * 获取延迟的时间 * @param time 传入的日期 * @param field * @param amount * @param format * @return */ public static String getDelayTime(String time, int field, int amount, String format) { Date date = DateUtils.parseStringDateToDate(time, format); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(field, amount); date = calendar.getTime(); return DateUtils.parseDateToString(date, format); } /** * 计算两个日期之间的天数 * * @param smdate * @param bdate * @return * @throws ParseException */ public static int daysBetween(String startDate, String endDate) throws ParseException { SimpleDateFormat sdf = getDateFormat(DATE_FORMAT); Date smdate = sdf.parse(startDate); Date bdate = sdf.parse(endDate); Calendar cal = Calendar.getInstance(); cal.setTime(smdate); long time1 = cal.getTimeInMillis(); cal.setTime(bdate); long time2 = cal.getTimeInMillis(); long between_days = (time2 - time1) / (1000 * 3600 * 24); return Integer.parseInt(String.valueOf(between_days)); } /** * 获取两个日期之间的天数 * * @param smdate * @param bdate * @return * @throws ParseException */ public static int daysBetween(Date smdate, Date bdate) throws ParseException { Calendar cal = Calendar.getInstance(); cal.setTime(smdate); long time1 = cal.getTimeInMillis(); cal.setTime(bdate); long time2 = cal.getTimeInMillis(); long between_days = (time2 - time1) / (1000 * 3600 * 24); return Integer.parseInt(String.valueOf(between_days)); } /** * 将Date转换为Calendar * * @param date * Date date * @return {@link Calendar} * @author jsZhu */ public static Calendar parseDateToCalendar(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal; } /** * 将Date 格式为yyyy-MM-dd 形式转换为 Integer * * @param date * Convert Date Object * @return Covert Date {@link Integer} * @author jsZhu */ public static Integer parseDateToInteger(Date date) { Calendar calendar = parseDateToCalendar(date); String year = String.valueOf(calendar.get(Calendar.YEAR)); String month = String.valueOf(((calendar.get(Calendar.MONTH)) + 1)); String day = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)); String hour = String.valueOf(calendar.get(Calendar.HOUR)); String minute = String.valueOf((calendar.get(Calendar.MINUTE))); return Integer.parseInt(year + month + day + hour + minute); } /** * 两个Date日期比较是否相当 * * @param date1 * @param date2 * @return boolean * @author jsZhu */ public static boolean isSameDay(Date date1, Date date2) { if (date1 == null || date2 == null) { throw new IllegalArgumentException("The date must not be null"); } Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); Calendar cal2 = Calendar.getInstance(); cal2.setTime(date2); return isSameDay(cal1, cal2); } /** * 两个装有日期 Calenday比较是否相等 * * @param cal1 * @param cal2 * @return boolean * @author jsZhu */ public static boolean isSameDay(Calendar cal1, Calendar cal2) { if (cal1 == null || cal2 == null) { throw new IllegalArgumentException("The date must not be null"); } return (cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA) && cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR)); } /** * 将Date字符串转换为Calendar * * @param date * DateString * @return Calendar * @author jsZhu */ public static Calendar parseStringDateToCalendar(String date) { Calendar calendar = new GregorianCalendar(); DateFormat df = new SimpleDateFormat(DateUtils.DATE_FORMAT); try { Date daystart = df.parse(date); calendar.setTime(daystart); return calendar; } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 获取在线北京时间 * * @return Date * @author jsZhu */ public static Date getDateOnline() { TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); // 时区设置 java.net.URLConnection uc; try { URL url = new URL("http://www.bjtime.cn"); uc = url.openConnection(); uc.connect(); long ld = uc.getDate(); Date date = new Date(ld); return date; } catch (IOException e) { e.printStackTrace(); } return new Date(); } /** * 将日期类型转化为字符串 * * @param date * @param formatString * @return */ public static String parseLongDateToStringDate(Date date, String formatString) { SimpleDateFormat format = getDateFormat(formatString); return format.format(date); } /** * 获取SimpleDateFormat * * @param formatString * @return */ private static SimpleDateFormat getDateFormat(String formatString) { return new SimpleDateFormat(formatString); } /** * 将字符串转化为日期类型 * * @param formatString * @return */ public static Date parseStringDateToDate(String date, String formatString) { try { return getDateFormat(formatString).parse(date); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } /** * 获取任意月份第一天或者最后一天 * * @param date * :当前月的Date对象 * @param currentDate * :枚举 * @param formatString * :格式化字符串 * @return */ public static String getStringDay(Date date, CurrentDate currentDate, String formatString) { SimpleDateFormat df = getDateFormat(formatString); GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance(); gcLast.setTime(date); switch (currentDate) { case FIRST: gcLast.add(Calendar.MONTH, 0); gcLast.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天 break; case LAST: gcLast.set(Calendar.DAY_OF_MONTH, gcLast.getActualMaximum(Calendar.DAY_OF_MONTH)); break; default: break; } return df.format(gcLast.getTime()); } /** * 获取任意月份第一天或者最后一天 * * @param date * :当前月的Date对象 * @param currentDate * :枚举 * @param formatString * :格式化字符串 * @return */ public static Date getDateDay(Date date, CurrentDate currentDate, String formatString) { GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance(); gcLast.setTime(date); switch (currentDate) { case FIRST: gcLast.add(Calendar.MONTH, 0); gcLast.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天 break; case LAST: gcLast.set(Calendar.DAY_OF_MONTH, gcLast.getActualMaximum(Calendar.DAY_OF_MONTH)); break; default: break; } return gcLast.getTime(); } /** * 日期枚举 * * @author liuyazhuang * */ public static enum CurrentDate { FIRST, LAST } /** * 格式化类别枚举 * * @author liuyazhuang * */ public static enum FormatType { DATE_FORMAT, DATE_TIME_FORMAT, DATE_MINUTE_FORMAT, MONTH_FORMAT, TIME_FORMAT } /** * 根据日期取得星期 * * @param dateStr * @param formatType * @return */ public static String parseStringDateToStringWeek(String dateStr, FormatType formatType) { final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; SimpleDateFormat sdfInput = null; switch (formatType) { case DATE_FORMAT: sdfInput = getDateFormat(DATE_FORMAT); break; case DATE_TIME_FORMAT: sdfInput = getDateFormat(DATE_TIME_FORMAT); break; case DATE_MINUTE_FORMAT: sdfInput = getDateFormat(DATE_MINUTE_FORMAT); break; case MONTH_FORMAT: sdfInput = getDateFormat(MONTH_FORMAT); break; case TIME_FORMAT: sdfInput = getDateFormat(TIME_FORMAT); break; default: break; } Calendar calendar = Calendar.getInstance(); Date date = new Date(); try { date = sdfInput.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } calendar.setTime(date); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (dayOfWeek < 0) dayOfWeek = 0; return dayNames[dayOfWeek]; } /** * 更加当前日期的星期(数字) * * @param dateStr * @param formatType * @return */ public static int getWeekByDate(Date dt) { Calendar calendar = Calendar.getInstance(); calendar.setTime(dt); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (dayOfWeek < 0) dayOfWeek = 0; return dayOfWeek; } /** * 取得当前时间 * * @return */ public static String getTodayTime() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 0); String today = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cal.getTime()); return today; } // 获取现在的时间 public static String getTime() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 0); String today = new SimpleDateFormat("HH:mm:ss").format(cal.getTime()); return today; } public static String getTodayTimes() { SimpleDateFormat dFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return dFormat.format(new Date()).toString(); } public static String getToday() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 0); String today = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()); return today; } public static Long getAppointTime(String times) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); try { return df.parse(getToday() + " " + times).getTime(); } catch (ParseException e) { e.printStackTrace(); } return 0L; } public static long getLongTypetime(String times) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); try { return df.parse(times).getTime(); } catch (ParseException e) { e.printStackTrace(); } return 0L; } // 获取指定时间的时间戳(精确到秒) public static long getMillis(String times) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { return df.parse(times).getTime(); } catch (ParseException e) { e.printStackTrace(); } return 0l; } public static String getDateTimeStr() { DateFormat df = new SimpleDateFormat("yyyyMMddHHmm"); try { return df.format(new Date()); } catch (Exception e) { return null; } } public static String getDate() { SimpleDateFormat dFormat = new SimpleDateFormat("yyyyMMdd"); return dFormat.format(new Date()).toString(); } public static long getCacheEffectMillisTime() { return getTomorrowZeroPointMillis() - System.currentTimeMillis(); } public static long getTomorrowZeroPointMillis() { SimpleDateFormat dFormat = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); long millis = 0; try { millis = dFormat.parse(getTomorrow() + " 00:00:00").getTime(); } catch (ParseException e) { // 如果出现异常,则默认保存24小时 return System.currentTimeMillis() + 1000 * 60 * 60 * 23; } return millis; } public static String getTomorrow() { long myTime = System.currentTimeMillis() + 60 * 60 * 24 * 1000; SimpleDateFormat dFormat = new SimpleDateFormat("yyyy-MM-dd"); return dFormat.format(new Date(myTime)).toString(); } public static String getSpecifiedDayBefore(int agoday) { Calendar c = Calendar.getInstance(); Date date = null; try { date = new SimpleDateFormat("yy-MM-dd").parse(getToday()); } catch (ParseException e) { e.printStackTrace(); } c.setTime(date); int day = c.get(Calendar.DATE); c.set(Calendar.DATE, day - agoday); String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); return dayBefore; } public static Date getSpecifiedDayBeforeFormatDate(int agoday, Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); int day = c.get(Calendar.DATE); c.set(Calendar.DATE, day - agoday); return c.getTime(); } public static String getSpecifiedDayAfter(int agoday) { Calendar c = Calendar.getInstance(); Date date = null; try { date = new SimpleDateFormat("yy-MM-dd").parse(getToday()); } catch (ParseException e) { e.printStackTrace(); } c.setTime(date); int day = c.get(Calendar.DATE); c.set(Calendar.DATE, day + agoday); String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); return dayBefore; } public static Date getSpecifiedDayAfterFormatDate(int agoday, Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); int day = c.get(Calendar.DATE); c.set(Calendar.DATE, day + agoday); return c.getTime(); } public static Long getAge(Date date) { Date endDate = new Date(); long day = (endDate.getTime() - date.getTime()) / 1000; return day / (60 * 60 * 24 * 365); } /** * 获得当前月的最后一天的最大天数 */ public static int getMaxDayByYearMonth(int year, int month) { int maxDay = 0; int day = 1; /** * Calendar 的 getInstance 方法返回一 个 Calendar 对象,其日历字段已由当前日期和时间初始化: */ Calendar calendar = Calendar.getInstance(); /** * 实例化日历各个字段,这里的day为实例化使用 */ calendar.set(year, month - 1, day); /** * Calendar.Date:表示一个月中的某天 calendar.getActualMaximum(int * field):返回指定日历字段可能拥有的最大值 */ maxDay = calendar.getActualMaximum(Calendar.DATE); return maxDay; } /** * 得到得到日期的前一天 */ public static Date getbeforDay(Date dateSign) { Date dBefore = new Date(); Calendar calendar = Calendar.getInstance(); // 得到日历 calendar.setTime(dateSign);// 把当前时间赋给日历 calendar.add(Calendar.DAY_OF_MONTH, -1); // 设置为前一天 dBefore = calendar.getTime(); return dBefore; } /** * 3天后失效 * * @param createTime * @return */ public static Date getLoseEffectiveness(Date createTime) { Date threeLoseTime = new Date(); Calendar calendar = Calendar.getInstance(); // 得到日历 calendar.setTime(createTime);// 把当前时间赋给日历 calendar.add(Calendar.DAY_OF_MONTH, +3); // 设置为3天后的时间 threeLoseTime = calendar.getTime(); return threeLoseTime; } /** * 0:上午 1:下午 * * @return */ public static int isAmOrPm() { GregorianCalendar ca = new GregorianCalendar(); return ca.get(GregorianCalendar.AM_PM); } }