package com.ycl.common.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.TimeZone; public class DateUtil { /** * 获取两日期之间间隔的天数 * * @param smdate 较小的时间 * @param bdate 较大的时间 * @return 相差天数 */ public static int daysBetween(Date smdate, Date bdate) { long between_days = 0; try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); smdate = sdf.parse(sdf.format(smdate)); bdate = sdf.parse(sdf.format(bdate)); Calendar cal = Calendar.getInstance(); cal.setTime(smdate); long time1 = cal.getTimeInMillis(); cal.setTime(bdate); long time2 = cal.getTimeInMillis(); between_days = (time2 - time1) / (1000 * 3600 * 24); } catch (ParseException e) { e.printStackTrace(); } return Integer.parseInt(String.valueOf(between_days)); } public static boolean isBetween(Date date, Date startDate, Date endDate) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); startDate = sdf.parse(sdf.format(startDate)); endDate = sdf.parse(sdf.format(endDate)); date = sdf.parse(sdf.format(date)); Calendar cal = Calendar.getInstance(); cal.setTime(date); long time0 = cal.getTimeInMillis(); cal.setTime(startDate); long time1 = cal.getTimeInMillis(); cal.setTime(endDate); long time2 = cal.getTimeInMillis(); if (time0 > time1 && time0 <= time2) return true; } catch (ParseException e) { e.printStackTrace(); } return false; } public static long DifferMillis(Date sDate, Date eDate) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sDate = sdf.parse(sdf.format(sDate)); eDate = sdf.parse(sdf.format(eDate)); Calendar cal = Calendar.getInstance(); cal.setTime(sDate); long time1 = cal.getTimeInMillis(); cal.setTime(eDate); long time2 = cal.getTimeInMillis(); return Math.abs(time1 - time2); } catch (ParseException e) { e.printStackTrace(); } return -1L; } public static long DifferSeconds(Date sDate, Date eDate) { return DifferMillis(sDate, eDate) / 1000; } /** * 相差分钟数 * * @param sDate * @param eDate * @return */ public static long DifferMinutes(Date sDate, Date eDate) { return Long.parseLong(String.valueOf(DifferMillis(sDate, eDate) / (1000 * 60))); } public static String getNowDate(String format) { return new SimpleDateFormat(format).format(new Date()); } public static String getDateString(Date date, String format) { return new SimpleDateFormat(format).format(date); } public static Date parse(String date, String format) { try { return new SimpleDateFormat(format).parse(date); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static boolean nowTimeBetween(String beginTimeStr, String endTimeStr) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm:ss"); Long beginTime = dateFormat.parse(beginTimeStr).getTime(); Long endTime = dateFormat.parse(endTimeStr).getTime(); Long nowTime = dateFormat.parse(dateFormat.format(new Date())) .getTime(); if (nowTime >= beginTime && nowTime <= endTime) { return true; } return false; } @SuppressWarnings("static-access") public static Date addDate(Date date, int days) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(calendar.DATE, days);// 把日期往后增加一天.整数往后推,负数往前移动 return calendar.getTime(); // 这个时间就是日期往后推一天的结果 } @SuppressWarnings("static-access") public static Date addHour(Date date, int hour) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(calendar.HOUR, hour);// 把日期往后增加一天.整数往后推,负数往前移动 return calendar.getTime(); // 这个时间就是日期往后推一天的结果 } @SuppressWarnings("static-access") public static Date addMinute(Date date, int minute) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(calendar.MINUTE, minute);// 把日期往后增加一天.整数往后推,负数往前移动 return calendar.getTime(); // 这个时间就是日期往后推一天的结果 } @SuppressWarnings("static-access") public static Date addSecond(Date date, int second) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(calendar.SECOND, second);// 把日期往后增加一天.整数往后推,负数往前移动 return calendar.getTime(); // 这个时间就是日期往后推一天的结果 } /** * 统计两个时间的时间差 * two-one * 相差几秒几毫秒 */ public static String getDistanceDateTime(Date one, Date two) { long day = 0;//天数差 long hour = 0;//小时数差 long min = 0;//分钟数差 long second = 0;//秒数差 long diff = 0;//毫秒差 String result = ""; final Calendar c = Calendar.getInstance(); c.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); c.setTime(one); long time1 = one.getTime(); long time2 = two.getTime(); diff = time2 - time1; day = diff / (24 * 60 * 60 * 1000); hour = (diff / (60 * 60 * 1000) - day * 24); min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60); second = diff / 1000; // System.out.println("day="+day+" hour="+hour+" min="+min+" ss="+second%60+" SSS="+diff%1000); String daystr = day % 30 + "天"; String hourStr = hour % 24 + "小时"; String minStr = min % 60 + "分"; String secondStr = second % 60 + "秒"; if (day != 0) { result = result + daystr; } if (hour != 0) { result = result + hourStr; } if (min != 0) { if (day == 0) { result = result + minStr; } } if (second != 0) { if (day == 0 && hour == 0) { result = result + secondStr; } } return result; } public static Date fromLocalDateTime(LocalDateTime ldt) { ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zdt = ldt.atZone(zoneId); Date date = Date.from(zdt.toInstant()); return date; } public static void main(String[] args) throws ParseException { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -1); calendar.add(Calendar.HOUR, -6); calendar.add(Calendar.MINUTE, -5); calendar.add(Calendar.SECOND, -4); calendar.add(Calendar.MILLISECOND, -30); Date date = calendar.getTime(); Date today = new Date(); // System.out.println(getDistanceDateTime(date,today)); } }