import java.util.Date; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Calendar; /** * @author XuBaofeng. * @date 2018/7/27. */ public class DateUtil { private static Calendar calendar; // ========== 年的操作 ========== // /** * 根据时间戳获取前一年的时间 * * @return * @throws Exception */ public static Long getBeforeOneYear(Long time) throws Exception { return getBeforeOneYear(new Timestamp(time)); } /** * 根据时间获取前一年的时间 * * @return * @throws Exception */ public static Long getBeforeOneYear(Timestamp time) throws Exception { Integer span = -1; return getTimeByDateAndYearSpan(time, span); } /** * 根据时间戳获取前一年的时间 * * @return * @throws Exception */ public static Long getAfterOneYear(Long time) throws Exception { return getAfterOneYear(new Timestamp(time)); } /** * 根据时间获取前一年的时间 * * @return * @throws Exception */ public static Long getAfterOneYear(Timestamp time) throws Exception { Integer span = 1; return getTimeByDateAndYearSpan(time, span); } /** * 根据时间戳和年跨度获取时间 * * @param time * @param span * @return * @throws Exception */ public static Long getTimeByDateAndYearSpan(Long time, Integer span) throws Exception { return getTimeByDateAndYearSpan(new Timestamp(time), span); } /** * 根据时间和年跨度获取时间 * * @param time * @param span * @return * @throws Exception */ public static Long getTimeByDateAndYearSpan(Timestamp time, Integer span) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); calendar.add(Calendar.YEAR, span); return calendar.getTimeInMillis(); } /** * 根据时间戳获取本年第一天 * * @return * @throws Exception */ public static Long getYearStart(Long time) throws Exception { return getYearStart(new Timestamp(time)); } /** * 根据时间获取本年第一天 * * @return * @throws Exception */ public static Long getYearStart(Timestamp time) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); // ===== 设置为本年第一天 calendar.set(Calendar.DAY_OF_YEAR, 1); // ===== 将小时至0 calendar.set(Calendar.HOUR_OF_DAY, 0); // ===== 将分钟至0 calendar.set(Calendar.MINUTE, 0); // ===== 将秒至0 calendar.set(Calendar.SECOND, 0); // ===== 将毫秒至0 calendar.set(Calendar.MILLISECOND, 0); return calendar.getTimeInMillis(); } /** * 根据时间戳获取本年最后一天 * * @return * @throws Exception */ public static Long getYearEnd(Long time) throws Exception { return getYearEnd(new Timestamp(time)); } /** * 根据时间获取本年第最后一天 * * @return * @throws Exception */ public static Long getYearEnd(Timestamp time) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); // ====== 设置为本年最后一天 calendar.set(Calendar.DAY_OF_YEAR, calendar.getActualMaximum(Calendar.DAY_OF_YEAR)); // ====== 将小时至23 calendar.set(Calendar.HOUR_OF_DAY, 23); // ====== 将分钟至59 calendar.set(Calendar.MINUTE, 59); // ====== 将秒至59 calendar.set(Calendar.SECOND, 59); // ====== 将毫秒至999 calendar.set(Calendar.MILLISECOND, 999); // ====== 获取本月最后一天的时间戳 return calendar.getTimeInMillis(); } // ========== 月的操作 ========== // /** * 根据时间戳获取当天日期的上一个月 * * @param time * @return * @throws Exception */ public static Long getBeforeOneMonth(Long time) throws Exception { return getBeforeOneMonth(new Timestamp(time)); } /** * 根据时间获取当天日期的上一个月 * * @param time * @return * @throws Exception */ public static Long getBeforeOneMonth(Timestamp time) throws Exception { Integer span = -1; return getTimeByDateAndMonthSpan(time, span); } /** * 根据时间戳获取当天日期的下一个月 * * @param time * @return * @throws Exception */ public static Long getAfterOneMonth(Long time) throws Exception { return getAfterOneMonth(new Timestamp(time)); } /** * 根据时间获取当天日期的下一个月 * * @param time * @return * @throws Exception */ public static Long getAfterOneMonth(Timestamp time) throws Exception { Integer span = 1; return getTimeByDateAndMonthSpan(time, span); } /** * 根据时间戳和月跨度获取时间戳 * * @param time * @param span * @return * @throws Exception */ public static Long getTimeByDateAndMonthSpan(Long time, Integer span) throws Exception { return getTimeByDateAndMonthSpan(new Timestamp(time), span); } /** * 根据时间和月跨度获取时间戳 * * @param time * @param span * @return * @throws Exception */ public static Long getTimeByDateAndMonthSpan(Timestamp time, Integer span) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); calendar.add(Calendar.MONTH, span); return calendar.getTimeInMillis(); } /** * 获取指定日期所在月份开始的时间戳 * * @param time * @return */ public static Long getMonthStart(Long time) throws Exception { return getMonthStart(new Timestamp(time)); } /** * 获取指定日期所在月份开始的时间戳 * * @param time * @return */ public static Long getMonthStart(Timestamp time) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); // ===== 设置为1号,当前日期既为本月第一天 calendar.set(Calendar.DAY_OF_MONTH, 1); // ===== 将小时至0 calendar.set(Calendar.HOUR_OF_DAY, 0); // ===== 将分钟至0 calendar.set(Calendar.MINUTE, 0); // ===== 将秒至0 calendar.set(Calendar.SECOND, 0); // ===== 将毫秒至0 calendar.set(Calendar.MILLISECOND, 0); // ===== 获取本月第一天的时间戳 return calendar.getTimeInMillis(); } /** * 获取指定日期所在月份结束的时间戳 * * @param time 指定日期 * @return */ public static Long getMonthEnd(Long time) throws Exception { return getMonthEnd(new Timestamp(time)); } /** * 获取指定日期所在月份结束的时间戳 * * @param time 指定日期 * @return */ public static Long getMonthEnd(Timestamp time) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); // ===== 设置为当月最后一天 calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); // ===== 将小时至23 calendar.set(Calendar.HOUR_OF_DAY, 23); // ===== 将分钟至59 calendar.set(Calendar.MINUTE, 59); // ===== 将秒至59 calendar.set(Calendar.SECOND, 59); // ===== 将毫秒至999 calendar.set(Calendar.MILLISECOND, 999); // ===== 获取本月最后一天的时间戳 return calendar.getTimeInMillis(); } // ========== 周的操作 ========== // /** * 根据时间戳获取前一天的同一时间 * * @param time * @return * @throws Exception */ public static Long getBeforeOneWeek(Long time) throws Exception { return getBeforeOneWeek(new Timestamp(time)); } /** * 根据时间获取前一天的同一时间 * * @param time * @return * @throws Exception */ public static Long getBeforeOneWeek(Timestamp time) throws Exception { Integer span = -1; return getTimeByDateAndWeekSpan(time, span); } /** * 根据时间戳获取后一天的同一时间 * * @param time * @return * @throws Exception */ public static Long getAfterOneWeek(Long time) throws Exception { return getAfterOneWeek(new Timestamp(time)); } /** * 根据时间获取后一天的同一时间 * * @param time * @return * @throws Exception */ public static Long getAfterOneWeek(Timestamp time) throws Exception { Integer span = 1; return getTimeByDateAndWeekSpan(time, span); } /** * 根据时间戳和天数获取同一时间 * * @param time * @param span * @return * @throws Exception */ public static Long getTimeByDateAndWeekSpan(Long time, Integer span) throws Exception { return getTimeByDateAndWeekSpan(new Timestamp(time), span); } /** * 根据时间和天数获取同一时间 * * @param time * @param span * @return * @throws Exception */ public static Long getTimeByDateAndWeekSpan(Timestamp time, Integer span) throws Exception { return getTimeByDateAndDaySpan(time, span * 7); } /** * 根据时间戳获取一天之中最早时间 * * @param time * @return * @throws Exception */ public static Long getWeekStart(Long time) throws Exception { return getWeekStart(new Timestamp(time)); } /** * 根据时间获取一天之中最早时间 * * @param time * @return * @throws Exception */ public static Long getWeekStart(Timestamp time) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); // ===== 设置为这周的第一天 calendar.set(Calendar.DAY_OF_WEEK, 1); // ===== 将小时至0 calendar.set(Calendar.HOUR_OF_DAY, 0); // ===== 将分钟至0 calendar.set(Calendar.MINUTE, 0); // ===== 将秒至0 calendar.set(Calendar.SECOND, 0); // ===== 将毫秒至0 calendar.set(Calendar.MILLISECOND, 0); return calendar.getTimeInMillis(); } /** * 根据时间获取一天之中最晚时间 * * @param time * @return * @throws Exception */ public static Long getWeekEnd(Long time) throws Exception { return getWeekEnd(new Timestamp(time)); } /** * 根据时间获取一天之中最晚时间 * * @param time * @return * @throws Exception */ public static Long getWeekEnd(Timestamp time) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); // ===== 设置为这周的最后一天 calendar.set(Calendar.DAY_OF_WEEK, calendar.getActualMaximum(Calendar.DAY_OF_WEEK)); // ===== 将小时至23 calendar.set(Calendar.HOUR_OF_DAY, 23); // ===== 将分钟至59 calendar.set(Calendar.MINUTE, 59); // ===== 将秒至59 calendar.set(Calendar.SECOND, 59); // ===== 将毫秒至999 calendar.set(Calendar.MILLISECOND, 999); return calendar.getTimeInMillis(); } // ========== 天的操作 ========== // /** * 根据时间戳获取前一天的同一时间 * * @param time * @return * @throws Exception */ public static Long getBeforeOneDay(Long time) throws Exception { return getBeforeOneDay(new Timestamp(time)); } /** * 根据时间获取前一天的同一时间 * * @param time * @return * @throws Exception */ public static Long getBeforeOneDay(Timestamp time) throws Exception { Integer span = -1; return getTimeByDateAndDaySpan(time, span); } /** * 根据时间戳获取后一天的同一时间 * * @param time * @return * @throws Exception */ public static Long getAfterOneDay(Long time) throws Exception { return getAfterOneDay(new Timestamp(time)); } /** * 根据时间获取后一天的同一时间 * * @param time * @return * @throws Exception */ public static Long getAfterOneDay(Timestamp time) throws Exception { Integer span = 1; return getTimeByDateAndDaySpan(time, span); } /** * 根据时间戳和天数获取同一时间 * * @param time * @param span * @return * @throws Exception */ public static Long getTimeByDateAndDaySpan(Long time, Integer span) throws Exception { return getTimeByDateAndDaySpan(new Timestamp(time), span); } /** * 根据时间和天数获取同一时间 * * @param time * @param span * @return * @throws Exception */ public static Long getTimeByDateAndDaySpan(Timestamp time, Integer span) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); calendar.add(Calendar.DATE, span); return calendar.getTimeInMillis(); } /** * 根据时间戳获取一天之中最早时间 * * @param time * @return * @throws Exception */ public static Long getDayStart(Long time) throws Exception { return getDayStart(new Timestamp(time)); } /** * 根据时间获取一天之中最早时间 * * @param time * @return * @throws Exception */ public static Long getDayStart(Timestamp time) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); // ===== 将小时至0 calendar.set(Calendar.HOUR_OF_DAY, 0); // ===== 将分钟至0 calendar.set(Calendar.MINUTE, 0); // ===== 将秒至0 calendar.set(Calendar.SECOND, 0); // ===== 将毫秒至0 calendar.set(Calendar.MILLISECOND, 0); return calendar.getTimeInMillis(); } /** * 根据时间获取一天之中最晚时间 * * @param time * @return * @throws Exception */ public static Long getDayEnd(Long time) throws Exception { return getDayEnd(new Timestamp(time)); } /** * 根据时间获取一天之中最晚时间 * * @param time * @return * @throws Exception */ public static Long getDayEnd(Timestamp time) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); // ===== 将小时至23 calendar.set(Calendar.HOUR_OF_DAY, 23); // ===== 将分钟至59 calendar.set(Calendar.MINUTE, 59); // ===== 将秒至59 calendar.set(Calendar.SECOND, 59); // ===== 将毫秒至999 calendar.set(Calendar.MILLISECOND, 999); return calendar.getTimeInMillis(); } // ========== 小时的操作 ========== // /** * 根据时间戳获取上个小时的时间 * * @param time * @return * @throws Exception */ public static Long getBeforeOneHour(Long time) throws Exception { return getBeforeOneHour(new Timestamp(time)); } /** * 根据时间获取上个小时的时间 * * @param time * @return * @throws Exception */ public static Long getBeforeOneHour(Timestamp time) throws Exception { Integer span = -1; return getTimeByDateAndHourSpan(time, span); } /** * 根据时间戳获取下个小时的时间 * * @param time * @return * @throws Exception */ public static Long getAfterOneHour(Long time) throws Exception { return getAfterOneHour(new Timestamp(time)); } /** * 根据时间获取下个小时的时间 * * @param time * @return * @throws Exception */ public static Long getAfterOneHour(Timestamp time) throws Exception { Integer span = 1; return getTimeByDateAndHourSpan(time, span); } /** * 根据时间戳和小时跨度获取时间 * * @param time * @param span * @return * @throws Exception */ public static Long getTimeByDateAndHourSpan(Long time, Integer span) throws Exception { return getTimeByDateAndHourSpan(new Timestamp(time), span); } /** * 根据时间和小时跨度获取时间 * * @param time * @param span * @return * @throws Exception */ public static Long getTimeByDateAndHourSpan(Timestamp time, Integer span) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); calendar.add(Calendar.HOUR, span); return calendar.getTimeInMillis(); } /** * 根据时间戳获取一小时之中最早时间 * * @param time * @return * @throws Exception */ public static Long getHourStart(Long time) throws Exception { return getHourStart(new Timestamp(time)); } /** * 根据时间获取一小时之中最早时间 * * @param time * @return * @throws Exception */ public static Long getHourStart(Timestamp time) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); // ===== 将分钟至0 calendar.set(Calendar.MINUTE, 0); // ===== 将秒至0 calendar.set(Calendar.SECOND, 0); // ===== 将毫秒至0 calendar.set(Calendar.MILLISECOND, 0); return calendar.getTimeInMillis(); } /** * 根据时间获取一小时之中最晚时间 * * @param time * @return * @throws Exception */ public static Long getHourEnd(Long time) throws Exception { return getHourEnd(new Timestamp(time)); } /** * 根据时间获取一小时之中最晚时间 * * @param time * @return * @throws Exception */ public static Long getHourEnd(Timestamp time) throws Exception { calendar = Calendar.getInstance(); calendar.setTime(time); // ===== 将分钟至59 calendar.set(Calendar.MINUTE, 59); // ===== 将秒至59 calendar.set(Calendar.SECOND, 59); // ===== 将毫秒至999 calendar.set(Calendar.MILLISECOND, 999); return calendar.getTimeInMillis(); } /** * 根据时间格式字符串获取时间戳 * * @param time * @param type * @return * @throws Exception */ public static Long getTimeByString(String time, String type) throws Exception { Date parse = new SimpleDateFormat(type).parse(time); return parse.getTime(); } /** * 根据时间戳和格式获取时间字符串 * * @param time * @param type * @return * @throws Exception */ public static String getTimeByLong(Long time, String type) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat(type); return sdf.format(new Date(time)); } }