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; import org.yeshi.utils.entity.DateInfo; 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分"; 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;// 计算差多少分钟 if (day > 0) { datatime = day + "天" + hour + "时" + min + "分"; } else { if (hour > 0) { datatime = hour + "时" + min + "分"; } else { if (min < 0) min = 0; datatime = min + "分"; } } return datatime; } public static DateInfo dateDiff3(long startTime, long endTime) throws Exception { long nm = 1000 * 60;// 一分钟的毫秒数 long nh = 1000 * 60 * 60;// 一小时的毫秒数 long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数 // 获得两个时间的毫秒时间差异 long diff = endTime - startTime; int day = (int) (diff / nd);// 计算差多少天 long hour = diff % nd / nh;// 计算差多少小时 long minute = diff % nd % nh / nm;// 计算差多少分钟 long second = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60); // 计算差多少秒 DateInfo dateInfo = new DateInfo(); dateInfo.setDay(day); dateInfo.setHour(hour); dateInfo.setMinute(minute); dateInfo.setSecond(second); return dateInfo; } public static String dateDiff4(Date startTime, Date endTime) throws Exception { String datatime = "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;// 计算差多少分钟 if (day > 0) { datatime = day + "天"; } else { if (hour > 0) { datatime = hour + "时"; } else { if (min < 0) min = 0; datatime = min + "分"; } } return datatime; } public static String dateDiff5(Date startTime, Date endTime) throws Exception { 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;// 计算差多少分钟 long second = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); // 计算差多少秒 String datatime = ""; if (day > 0) { datatime = day + "天"; } else if (hour > 0) { datatime = hour + "小时"; } else if (min > 0) { datatime = min + "分钟"; } else if (second > 0) { datatime = second + "秒"; } return datatime; } public static long dateDiffMin(Date startTime, Date endTime) throws Exception { 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 + day * 24 * 60 + hour * 60;// 计算差多少分钟 return min; } /** * 通过时间秒毫秒数判断两个时间的间隔 * * @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 date1 * @param date2 * @return */ public static boolean isSameMonth(Date date1, Date date2) { Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(date1); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(date2); int year1 = calendar1.get(Calendar.YEAR); int year2 = calendar2.get(Calendar.YEAR); int month1 = calendar1.get(Calendar.MONTH); int month2 = calendar2.get(Calendar.MONTH); System.out.println(year1 + " " + month1); System.out.println(year2 + " " + month2); return calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR) && calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH); } /** * 指定日期加上天数后的日期 * * @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 Date plusDayReturnDate(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 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 Date plusDayDate(int num, Date currdate) { Calendar ca = Calendar.getInstance(); ca.setTime(currdate); ca.add(Calendar.DATE, num); return ca.getTime(); } /** * 加上月份 * * @param currdate * @param num * @return */ public static Date plusMonths(Date currdate, int num) { Calendar ca = Calendar.getInstance(); ca.setTime(currdate); ca.add(Calendar.MONTH, num); return ca.getTime(); } /** * 加上年份 * * @param currdate * @param num * @return */ public static Date plusYears(Date currdate, int num) { Calendar ca = Calendar.getInstance(); ca.setTime(currdate); ca.add(Calendar.YEAR, num); return ca.getTime(); } /** * 减去月份 * * @param currdate * @param num * @return */ public static Date reduceMonth(Date currdate, int num) { Calendar ca = Calendar.getInstance(); ca.setTime(currdate); ca.add(Calendar.MONTH, -num); return ca.getTime(); } public static Date reduceDay(Date currdate, int num) { Calendar ca = Calendar.getInstance(); ca.setTime(currdate); ca.add(Calendar.DATE, -num); return 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 num 减去的天数 * @param nowDate 创建时间 * @return * @throws ParseException */ public static String reduceDay2(int num, Date date) throws ParseException { // 设置要获取到什么样的时间 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // 获取String类型的时间 String date_str = format.format(date); Date currdate = format.parse(date_str); 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 Date reduceDay(int num, Date date) throws ParseException { // 设置要获取到什么样的时间 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // 获取String类型的时间 String date_str = format.format(date); Date currdate = format.parse(date_str); Calendar ca = Calendar.getInstance(); ca.setTime(currdate); ca.add(Calendar.DATE, -num); // 日期减 如果不够减会将月变动 return ca.getTime(); } /** * 指定日期减去天数后的日期 * * @param num 减去的天数 * @param nowDate 创建时间 * @return * @throws ParseException */ public static String reduceDayTostring(int num, Date date) throws ParseException { // 设置要获取到什么样的时间 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // 获取String类型的时间 String date_str = format.format(date); Date currdate = format.parse(date_str); 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 minDate, Date maxDate) throws ParseException { Calendar cal = Calendar.getInstance(); cal.setTime(minDate); long minTime = cal.getTimeInMillis(); cal.setTime(maxDate); long maxTime = cal.getTimeInMillis(); long between_days = (maxTime - minTime) / (1000 * 3600 * 24); return Integer.parseInt(String.valueOf(between_days)); } /** * 字符串日期格式的计算 * * @param smdate * @param bdate * @return 单位天数 * @throws ParseException */ public static int daysBetween2(Date minDate, Date maxDate) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return daysBetween(sdf.format(minDate), sdf.format(maxDate)); } /** * 字符串日期格式的计算 * * @param smdate * @param bdate * @return * @throws ParseException */ public static int daysBetween(String minDate, String maxDate) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(minDate)); long minTime = cal.getTimeInMillis(); cal.setTime(sdf.parse(maxDate)); long maxTime = cal.getTimeInMillis(); long between_days = (maxTime - minTime) / (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 date * @param min 随机添加的分钟数 * @return */ public static Date reduceRandomMinute(Date date, int min) { long rand = (long) (Math.random() * 1000 * 60 * min); long time = date.getTime() - rand; return new Date(time); } /** * 计算两时间月差 * * @param startDate * @param endDate * @return int * @throws ParseException */ public static int getMonthSpace(String startDate, String endDate) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); return getMonthSpace(sdf.parse(startDate), sdf.parse(endDate)); } /** * 计算两时间月差 * * @param startDate * @param endDate * @return int * @throws ParseException */ public static int getMonthSpace(Date startDate, Date endDate) { Calendar start = Calendar.getInstance(); Calendar end = Calendar.getInstance(); start.setTime(startDate); end.setTime(endDate); int result = end.get(Calendar.MONTH) - start.get(Calendar.MONTH); int month = (end.get(Calendar.YEAR) - start.get(Calendar.YEAR)) * 12; return Math.abs(month + result); } public static Date getTodayStartTime() { Calendar todayStart = Calendar.getInstance(); todayStart.set(Calendar.HOUR_OF_DAY, 0); todayStart.set(Calendar.MINUTE, 0); todayStart.set(Calendar.SECOND, 0); todayStart.set(Calendar.MILLISECOND, 0); return todayStart.getTime(); } public static Date getTodayEndTime() { Calendar todayEnd = Calendar.getInstance(); todayEnd.set(Calendar.HOUR_OF_DAY, 23); todayEnd.set(Calendar.MINUTE, 59); todayEnd.set(Calendar.SECOND, 59); todayEnd.set(Calendar.MILLISECOND, 999); return todayEnd.getTime(); } /** * 获取指定年月的第一天 * * @param yearMonth * @return */ public static String getFirstDayOfMonth(String yearMonth) { int year = Integer.parseInt(yearMonth.split("-")[0]); // 年 int month = Integer.parseInt(yearMonth.split("-")[1]); // 月 return getFirstDayOfMonth(year, month); } /** * 获取指定年月的第一天 * * @param year * @param month * @return */ public static String getFirstDayOfMonth(int year, int month) { Calendar cal = Calendar.getInstance(); // 设置年份 cal.set(Calendar.YEAR, year); // 设置月份 cal.set(Calendar.MONTH, month - 1); // 获取某月最小天数 int firstDay = cal.getMinimum(Calendar.DATE); // 设置日历中月份的最小天数 cal.set(Calendar.DAY_OF_MONTH, firstDay); // 格式化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(cal.getTime()); } /** * 获取指定年月的最后一天 * * @param yearMonth * @return */ public static String getLastDayOfMonth(String yearMonth) { int year = Integer.parseInt(yearMonth.split("-")[0]); // 年 int month = Integer.parseInt(yearMonth.split("-")[1]); // 月 return getLastDayOfMonth(year, month); } /** * 获取指定年月的最后一天 * * @param year * @param month * @return */ public static String getLastDayOfMonth(int year, int month) { Calendar cal = Calendar.getInstance(); // 设置年份 cal.set(Calendar.YEAR, year); // 设置月份 cal.set(Calendar.MONTH, month - 1); // 获取某月最大天数 int lastDay = cal.getActualMaximum(Calendar.DATE); // 设置日历中月份的最大天数 cal.set(Calendar.DAY_OF_MONTH, lastDay); // 格式化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(cal.getTime()); } public static void main(String[] args) throws ParseException { System.out.println(getMonthSpace("2012-02", "2012-02")); } }