package lizikj.bigwheel.common.vo.merchandise.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.apache.log4j.Logger; /** * 时间帮助类 * */ public class DateUtil { final static Logger logger = Logger.getLogger(DateUtil.class); /** * 判断是否是周末 * * @return */ public static boolean isWeek() { Calendar calendar = Calendar.getInstance(); int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (week == 6 || week == 0) { return true; } return false; } /** * 判断时间是否在时间段内 * * @param date * 当前时间 yyyy-MM-dd HH:mm:ss * @param strDateBegin * 开始时间 00:00:00 * @param strDateEnd * 结束时间 00:05:00 * @return */ public static boolean isTimePeriod(Date date, String strDateBegin, String strDateEnd) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strDate = sdf.format(date); // 截取当前时间时分秒 int strDateH = Integer.parseInt(strDate.substring(11, 13)); int strDateM = Integer.parseInt(strDate.substring(14, 16)); int strDateS = Integer.parseInt(strDate.substring(17, 19)); // 截取开始时间时分秒 int strDateBeginH = Integer.parseInt(strDateBegin.substring(0, 2)); int strDateBeginM = Integer.parseInt(strDateBegin.substring(3, 5)); int strDateBeginS = Integer.parseInt(strDateBegin.substring(6, 8)); // 截取结束时间时分秒 int strDateEndH = Integer.parseInt(strDateEnd.substring(0, 2)); int strDateEndM = Integer.parseInt(strDateEnd.substring(3, 5)); int strDateEndS = Integer.parseInt(strDateEnd.substring(6, 8)); if ((strDateH >= strDateBeginH && strDateH <= strDateEndH)) { // 当前时间小时数在开始时间和结束时间小时数之间 if (strDateH > strDateBeginH && strDateH < strDateEndH) { return true; // 当前时间小时数等于开始时间小时数,分钟数在开始和结束之间 } else if (strDateH == strDateBeginH && strDateM >= strDateBeginM && strDateM <= strDateEndM) { return true; // 当前时间小时数等于开始时间小时数,分钟数等于开始时间分钟数,秒数在开始和结束之间 } else if (strDateH == strDateBeginH && strDateM == strDateBeginM && strDateS >= strDateBeginS && strDateS <= strDateEndS) { return true; } // 当前时间小时数大等于开始时间小时数,等于结束时间小时数,分钟数小等于结束时间分钟数 else if (strDateH >= strDateBeginH && strDateH == strDateEndH && strDateM <= strDateEndM) { return true; // 当前时间小时数大等于开始时间小时数,等于结束时间小时数,分钟数等于结束时间分钟数,秒数小等于结束时间秒数 } else if (strDateH >= strDateBeginH && strDateH == strDateEndH && strDateM == strDateEndM && strDateS <= strDateEndS) { return true; } else { return false; } } else { return false; } } /** * 判断当前日期是否在一个日期范围内 * * @param fromDate * @param toDate * @return */ public static boolean isDate(Date fromDate, Date toDate) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String d1 = sdf.format(new Date());// 第一个时间 try { Date testDate = sdf.parse(d1); // 1、 交换开始和结束日期 if (fromDate.getTime() > toDate.getTime()) { Date tempDate = fromDate; fromDate = toDate; toDate = tempDate; } // 2、缩小范围 long testDateTime = testDate.getTime(); if ((testDateTime > fromDate.getTime() && testDateTime > toDate.getTime()) || testDateTime < fromDate.getTime() && testDateTime < toDate.getTime()) { return false; } } catch (Exception e) { logger.error("isDate is error", e); } return true; } // 最近一周 public static String getWeek(int num) { String result = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar cl = Calendar.getInstance(); cl.add(Calendar.WEEK_OF_YEAR, -1); // 一周 Date dateFrom = cl.getTime(); result = sdf.format(dateFrom); // System.out.println(sdf.format(dateFrom)+"到"+sdf.format(dateNow)); return result; } // 最近一月 public static String getMonth(int num) { String result = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar cl = Calendar.getInstance(); cl.add(Calendar.MONTH, -num); // 一个月 Date dateFrom = cl.getTime(); result = sdf.format(dateFrom); return result; } // 当前时间的前一天 public static Date getNextDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, -1); date = calendar.getTime(); return date; } // 判断是否在时间前后 public static int compare_date(String DATE1, String DATE2) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm"); try { Date dt1 = df.parse(DATE1); Date dt2 = df.parse(DATE2); if (dt1.getTime() > dt2.getTime()) { System.out.println("dt1 在dt2前"); return 1; } else if (dt1.getTime() < dt2.getTime()) { System.out.println("dt1在dt2后"); return -1; } else { return 0; } } catch (Exception e) { logger.error("compare_date is error", e); } return 0; } /** * 判断指定日期是否在一个日期范围内 * * @param fromDate * 范围开始日期 * @param toDate * 范围结束日期 * @param testDate * 测试日期 * @return 在范围内true,否则false */ public static boolean betweenDays(Date fromDate, Date toDate, Date testDate) { if (fromDate == null || toDate == null || testDate == null) { return false; } // 1、 交换开始和结束日期 if (fromDate.getTime() > toDate.getTime()) { Date tempDate = fromDate; fromDate = toDate; toDate = tempDate; } // 2、缩小范围 long testDateTime = testDate.getTime(); if ((testDateTime > fromDate.getTime() && testDateTime > toDate.getTime()) || testDateTime < fromDate.getTime() && testDateTime < toDate.getTime()) { return false; } return true; } public static Date getDateTime(long now) { DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(now); System.out.println(now + " = " + formatter.format(calendar.getTime())); String result = formatter.format(calendar.getTime()); return calendar.getTime(); } public static Date transferLongToDate(Long millSec) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = new Date(millSec); return date; } public static void main(String[] args) { String now = "1475921070450"; System.out.println(transferLongToDate(Long.valueOf(now))); } }
/** * 判断两个时间区间是否有交集的方法 * * @param date1_1 * 区间1的时间始 * @param date1_2 * 区间1的时间止 * @param date2_1 * 区间2的时间始 * @param date2_2 * 区间2的时间止 * @return 区间1和区间2如果存在交集,则返回true,否则返回falses */ public static boolean test(String startA, String endA, String startB, String endB) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date a1 = sdf.parse(startA); Date a2 = sdf.parse(endA); Date b1 = sdf.parse(startB); Date b2 = sdf.parse(endB); /** * if(第一组最后时间小于等于第二组最前时间 || 第一组最前时间大于等于第二组最后时间){ 无交集 } else{ 有交集 } */ if ((a2.getTime() <= b1.getTime()) || a1.getTime() >= b2.getTime()) { return false; } else { return true; } } public static void main(String[] args) throws Exception { String dateStr1_1 = "2017-10-01 00:00:00"; String dateStr1_2 = "2017-10-03 23:59:59"; String dateStr2_1 = "2017-10-04 00:00:00"; String dateStr2_2 = "2017-10-05 23:59:59"; boolean b = test(dateStr1_1, dateStr1_2, dateStr2_1, dateStr2_2); System.out.println(b == true ? "有交集" : "无交集"); }
/** * 判断时间是否在时间段内 * @param nowTime * @param beginTime * @param endTime * @return */ public static boolean belongCalendar(Date nowTime, Date beginTime, Date endTime) { Calendar date = Calendar.getInstance(); date.setTime(nowTime); Calendar begin = Calendar.getInstance(); begin.setTime(beginTime); Calendar end = Calendar.getInstance(); end.setTime(endTime); if (date.after(begin) && date.before(end)) { return true; } else { return false; } }
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import com.baoqilai.ddg.exception.BaseRuntimeException; public class DateUtil { /** * * @Description: 给出的时间和当前时间的小时差 * @date 2017年3月24日 下午5:47:49 * @param startDate * @return */ public static double getHour(Date startDate) { long time = startDate.getTime(); Date date = new Date(); long nowTime = date.getTime(); double mil = (nowTime - time) / 1000; double hour = mil / 3600; return hour; } /** * * @Description: 计算两个时间的 天数差 过 00:00算一条 * @date 2017年3月24日 下午6:34:21 * @param startDate * @return */ public static int getDay(Date startDate) { Date date = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); String nowDate = formatter.format(date); String sd = formatter.format(startDate); int day = Integer.parseInt(nowDate) - Integer.parseInt(sd); return day; } public static String getDateString(Date startDate,String fmt) { SimpleDateFormat formatter = new SimpleDateFormat(fmt); String nowDate = formatter.format(startDate); return nowDate; } public static Date getNowDate() { String str = "2017-03-23 13:30:20"; SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date parse = null; try { parse = formatter.parse(str); } catch (ParseException e) { e.printStackTrace(); } return parse; } public static void main(String[] args) { Date nowDate = getNowDate(); /* * double hour = getHour(nowDate); * * if (hour > 5) { System.out.println("-------------"); } * * System.out.println(hour); */ Integer day = getDay(nowDate); System.out.println(day); } /** * desc: 将字符串转换为date对象 * date: 2017/5/20 15:32 * @param date * @return */ public static Date formart(String date){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date2 = sdf.parse(date); return date2; } catch (ParseException e) { throw new BaseRuntimeException("传入的日期格式有误!(正确格式为:yyyy-MM-dd HH:mm:ss)"); } } /** * desc: 判断两个时间段是否有交集 * date: 2017/5/20 15:37 * @param startdate1 * @param enddate1 * @param startdate2 * @param enddate2 * @return */ public static boolean isOverlap (String startdate1,String enddate1,String startdate2,String enddate2){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date leftStartDate = null; Date leftEndDate = null; Date rightStartDate = null; Date rightEndDate = null; try { leftStartDate = format.parse(startdate1); leftEndDate = format.parse(enddate1); rightStartDate = format.parse(startdate2); rightEndDate = format.parse(enddate2); } catch (ParseException e) { return false; } return ((leftStartDate.getTime() >= rightStartDate.getTime()) && leftStartDate.getTime() < rightEndDate.getTime()) || ((leftStartDate.getTime() > rightStartDate.getTime()) && leftStartDate.getTime() <= rightEndDate.getTime()) || ((rightStartDate.getTime() >= leftStartDate.getTime()) && rightStartDate.getTime() < leftEndDate.getTime()) || ((rightStartDate.getTime() > leftStartDate.getTime()) && rightStartDate.getTime() <= leftEndDate.getTime()); } /** * desc: 判断当前时间是否包含在指定的时间区间 * date: 2017/5/25 10:49 * @param startTime 开始时间 * @param endTime 结束时间 * @return */ public static boolean isInDate(Date startTime,Date endTime) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String strDate = sdf.format(new Date()); String strDateBegin = sdf.format(startTime); String strDateEnd = sdf.format(endTime); // 截取当前时间年月日 转成整型 Long tempDate=Long.parseLong(strDate); // 截取开始时间年月日 转成整型 Long tempDateBegin=Long.parseLong(strDateBegin); // 截取结束时间年月日 转成整型 Long tempDateEnd=Long.parseLong(strDateEnd); if ((tempDate >= tempDateBegin && tempDate <= tempDateEnd)) { return true; } else { return false; } } /** * 指定日期加上天数后的日期 * @param num 为增加的天数 * @param newDate 创建时间 * @return * @throws ParseException */ public static Date plusDay(int num,String newDate) throws ParseException{ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date currdate = format.parse(newDate); System.out.println("现在的日期是:" + currdate); Calendar ca = Calendar.getInstance(); ca.add(Calendar.DATE, num);// num为增加的天数,可以改变的 currdate = ca.getTime(); String enddate = format.format(currdate); System.out.println("增加天数以后的日期:" + enddate); return currdate; } /** * 当前日期加上天数后的日期 * @param num 为增加的天数 * @return */ public static Date plusDay2(int num){ Date d = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String currdate = format.format(d); System.out.println("现在的日期是:" + currdate); Calendar ca = Calendar.getInstance(); ca.add(Calendar.DATE, num);// num为增加的天数,可以改变的 d = ca.getTime(); String enddate = format.format(d); System.out.println("增加天数以后的日期:" + enddate); return d; } }