package org.yeshi.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; public class DateUtil { public static String dateDiff(String startTime, String endTime) { String datatime = 0 + "天" + 0 + "小时" + 0 + "分钟"; SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); try { long nm = 1000 * 60;// 一分钟的毫秒数 long nh = 1000 * 60 * 60;// 一小时的毫秒数 long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数 // 获得两个时间的毫秒时间差异 long diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime(); long day = diff / nd;// 计算差多少天 long hour = diff % nd / nh;// 计算差多少小时 long min = diff % nd % nh / nm;// 计算差多少分钟 datatime = day + "天" + hour + "小时" + min + "分钟"; } catch (ParseException e) { e.printStackTrace(); } return datatime; } public static String dateDiff2(Date startTime, Date endTime) throws Exception { String datatime = 0 + "天" + 0 + "小时" + 0 + "分钟"; long nm = 1000 * 60;// 一分钟的毫秒数 long nh = 1000 * 60 * 60;// 一小时的毫秒数 long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数 // 获得两个时间的毫秒时间差异 long diff = endTime.getTime() - startTime.getTime(); long day = diff / nd;// 计算差多少天 long hour = diff % nd / nh;// 计算差多少小时 long min = diff % nd % nh / nm;// 计算差多少分钟 datatime = day + "天" + hour + "小时" + min + "分钟"; return datatime; } /** * 通过时间秒毫秒数判断两个时间的间隔 * @param date1 * @param date2 * @return */ public static int differentDaysByMillisecond(Date start, Date end) { return (int) ((end.getTime() - start.getTime()) / (1000*3600*24)); } public String transferLongToDate(String dateFormat, Long millSec) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(millSec); return sdf.format(date); } /** * 验证是否属于同一天 * * @param date1 * @param date2 * @return */ public static boolean isSameDay(Date date1, Date date2) { if (date1 != null && date2 != null) { Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); Calendar cal2 = Calendar.getInstance(); cal2.setTime(date2); return isSameDay(cal1, cal2); } else { return false; } } /** * 验证是否属于同一天 * * @param cal1 * @param cal2 * @return */ public static boolean isSameDay(Calendar cal1, Calendar cal2) { if (cal1 != null && cal2 != null) { return cal1.get(0) == cal2.get(0) && cal1.get(1) == cal2.get(1) && cal1.get(6) == cal2.get(6); } else { return false; } } /** * 指定日期加上天数后的日期 * * @param num * 增加的天数 * @param nowDate * 创建时间 * @return * @throws ParseException */ public static String plusDay(int num, String nowDate) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date currdate = format.parse(nowDate); Calendar ca = Calendar.getInstance(); ca.setTime(currdate); ca.add(Calendar.DATE, num); return format.format(ca.getTime()); } /** * 指定日期加上天数后的日期 * * @param num * 增加的天数 * @param nowDate * 创建时间 * @return * @throws ParseException */ public static String plusDay(int num, Date currdate) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Calendar ca = Calendar.getInstance(); ca.setTime(currdate); ca.add(Calendar.DATE, num); return format.format(ca.getTime()); } /** * 指定日期减去天数后的日期 * * @param num * 减去的天数 * @param nowDate * 创建时间 * @return * @throws ParseException */ public static String reduceDay(int num, String nowDate) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date currdate = format.parse(nowDate); Calendar ca = Calendar.getInstance(); ca.setTime(currdate); ca.add(Calendar.DATE, -num); // 日期减 如果不够减会将月变动 return format.format(ca.getTime()); } /** * 计算两个日期之间相差的天数 * @param smdate 较小的时间 * @param bdate 较大的时间 * @return 相差天数 * @throws ParseException * calendar 对日期进行时间操作 * getTimeInMillis() 获取日期的毫秒显示形式 */ public static int daysBetween(Date smdate,Date bdate) throws ParseException { Calendar cal = Calendar.getInstance(); cal.setTime(smdate); long time1 = cal.getTimeInMillis(); cal.setTime(bdate); long time2 = cal.getTimeInMillis(); long between_days=(time2-time1)/(1000*3600*24); return Integer.parseInt(String.valueOf(between_days)); } /** * 字符串日期格式的计算 * @param smdate * @param bdate * @return * @throws ParseException */ public static int daysBetween(String smdate,String bdate) throws ParseException{ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(smdate)); long time1 = cal.getTimeInMillis(); cal.setTime(sdf.parse(bdate)); long time2 = cal.getTimeInMillis(); long between_days=(time2-time1)/(1000*3600*24); return Integer.parseInt(String.valueOf(between_days)); } /** * 返回中间日期 * @param startTime * @param endTime * @return * @throws Exception */ public static List dayFactory(String startTime, String endTime) throws Exception { List listDate = new ArrayList(); String plusDay = ""; for (int i = 0; i < 1000; i++) { if (i == 0) { plusDay = startTime; } else { plusDay = DateUtil.plusDay(i, startTime); } listDate.add(plusDay); if (plusDay.equals(endTime)) { break; // 时间结束 } } return listDate; } /** * @param args * @throws ParseException * format() 对日期进行格式化处理 * parse() 将日期设置为date类型 */ public static void main(String[] args) throws ParseException { // TODO Auto-generated method stub SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d1=sdf.parse("2016-09-08 00:00:00"); Date d2=sdf.parse("2016-09-08 00:00:00"); System.out.println(daysBetween(d1,d2)); System.out.println(daysBetween("2016-09-08 10:10:10","2016-09-29 00:00:00")); } }