package cn.emay.sdk.util; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateUtil { public static final long ONE_HOUR_TIME_LONG = 3600000; public static String toString(Date date, String format) { String dateStr = null; try { SimpleDateFormat sdf = new SimpleDateFormat(format); dateStr = sdf.format(date); } catch (Exception e) { } return dateStr; } public static Date parseDate(String dateStr, String format) { Date date = null; try { SimpleDateFormat sdf = new SimpleDateFormat(format); date = sdf.parse(dateStr); } catch (Exception e) { } return date; } /** * 获取日期当天的最小时间日期,0点 */ public static Date getMinTimeDateByDate(Date date) { if (date == null) { date = new Date(); } String datestr = toString(date, "yyyyMMdd"); return parseDate(datestr, "yyyyMMdd"); } /** * 获取日期当天的最大时间日期,12点整 */ public static Date getMaxTimeDateByDate(Date date) { if (date == null) { date = new Date(); } String datestr = toString(date, "yyyyMMdd"); Date d = parseDate(datestr, "yyyyMMdd"); return new Date(d.getTime() + 24l * 60l * 60l * 1000l - 1l); } public static long subTime(Date startDate, Date endDate) { return endDate.getTime() - startDate.getTime(); } /** * 获取上月第一天最早时间 * * @return Date */ public static Date getLastMonthFirstDay() { Calendar cal_1 = Calendar.getInstance();// 获取当前日期 cal_1.setTime(getMinTimeDateByDate(new Date())); cal_1.add(Calendar.MONTH, -1); cal_1.set(Calendar.DAY_OF_MONTH, 1); return cal_1.getTime(); } /** * 获取上月最后一天最晚时间 * * @return Date */ public static Date getLastMonthLastDay() { Calendar cale = Calendar.getInstance(); cale.setTime(getMinTimeDateByDate(new Date())); cale.add(Calendar.MONTH, -1); cale.set(Calendar.DAY_OF_MONTH, cale.getActualMaximum(Calendar.DAY_OF_MONTH)); return new Date(cale.getTime().getTime() + 1000l * 60l * 60l * 24l - 1l); } /** * 获取本月第一天最早时间 * * @return Date */ public static Date getNowMonthFirstDay() { Calendar cal_1 = Calendar.getInstance();// 获取当前日期 cal_1.setTime(getMinTimeDateByDate(new Date())); cal_1.add(Calendar.MONTH, 0); cal_1.set(Calendar.DAY_OF_MONTH, 1); return cal_1.getTime(); } /** * 获取本月最后一天最晚时间 * * @return Date */ public static Date getNowMonthLastDay() { Calendar cale = Calendar.getInstance(); cale.setTime(getMinTimeDateByDate(new Date())); cale.set(Calendar.DAY_OF_MONTH, cale.getActualMaximum(Calendar.DAY_OF_MONTH)); return new Date(cale.getTime().getTime() + 1000l * 60l * 60l * 24l - 1l); } /** * 获取当前时间变量内月份的第一天的日期 * * @param changeMonthNum * 变动月份数。例如 -1:前一个月的最小日期 1 :后一个月的最小日期 * @return Date */ public static Date getOtherMonthFirstDay(int changeMonthNum) { Calendar cale = Calendar.getInstance(); Date nowMonthFirstDay = getNowMonthFirstDay(); cale.setTime(nowMonthFirstDay); cale.add(Calendar.MONTH, changeMonthNum); return cale.getTime(); } /** * 获取本月最后一天 * * @return Date */ public static Date getTheMonthLastDay(Date date) { if (date == null) { return null; } Calendar cale = Calendar.getInstance(); cale.setTime(date); cale.set(Calendar.DAY_OF_MONTH, cale.getActualMaximum(Calendar.DAY_OF_MONTH)); cale.set(Calendar.HOUR, 0); cale.set(Calendar.HOUR_OF_DAY, 0); cale.set(Calendar.MINUTE, 0); cale.set(Calendar.SECOND, 0); cale.set(Calendar.MILLISECOND, 0); return cale.getTime(); } /** * 返回之前某之后的某天开始日期、结束或者当前时分秒 * * @param date * 日期 * @param n * 正数之后的某天,负数之前某天 * @param type * 返回数据类型,开始00:00:00 结束 23:59:59或当 * * ex : * * getOtherDay(new Date(), -1, ""); 前一天当前时分秒 * * getOtherDay(new Date(), -1, "start"); 前一天开始时间00:00:00 * * getOtherDay(new Date(), -1, "end"); 前一天结束时间23:59:59 * @return */ public static Date getOtherDay(Date date, int n, String type) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); if ("start".equals(type)) { calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); } else if ("end".equals(type)) { calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MINUTE, 59); } calendar.add(Calendar.DAY_OF_MONTH, n); date = calendar.getTime(); return date; } public static void main(String[] args) { Date otherDay = getOtherDay(new Date(), -1, ""); System.out.println(otherDay); // System.out.println(toString(getTheMonthLastDay(new Date()), // "yyyy-MM-dd HH:mm:ss")); // System.out.println(toString(getLastMonthLastDay(), "yyyy-MM-dd // HH:mm:ss")); // System.out.println(toString(getNowMonthFirstDay(), "yyyy-MM-dd // HH:mm:ss")); // System.out.println(toString(getNowMonthLastDay(), "yyyy-MM-dd // HH:mm:ss")); } }