| 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")); | 
|     } | 
|   | 
| } |