场景:1.业务中需要得到今天是周几,返回的是1-7 但是需要减1 因为,老外设计的是按照周日算第一天。
2.计算两个时间段的时间差
3.得到某个时间点的日期,一般用到的场景是,两个时间点来做比较。date.compareTo(date2) 这个方法
package com.coder520.common.utils; import java.util.Calendar; import java.util.Date; /** * Created by JackWangon[www.aiprogram.top] 2017/6/21. */ public class DateUtils { private static Calendar calendar = Calendar.getInstance(); /** *@Author JackWang [www.coder520.com] *@Date 2017/6/21 21:45 *@Description 得到今天是周几 */ public static int getTodayWeek(){ calendar.setTime(new Date()); int week = calendar.get(Calendar.DAY_OF_WEEK)-1; if(week<0) week=7; return week; } /** *@Author JackWang [www.coder520.com] *@Date 2017/6/21 21:46 *@Description 计算时间差 分钟数 */ public static int getMunite(Date startDate,Date endDate){ long start = startDate.getTime(); long end = endDate.getTime(); int munite = (int)(end-start)/(1000*60); return munite; } /** *@Author JackWang [www.coder520.com] *@Date 2017/6/21 22:28 *@Description 获取当天某个时间 */ public static Date getDate(int hour,int minute){ calendar.set(Calendar.HOUR_OF_DAY,hour); calendar.set(Calendar.MINUTE,minute); return calendar.getTime(); } }
package com.coder520.mamabike.common.utils; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.springframework.stereotype.Component; @Component @SuppressWarnings("unused") public class DateUtil { public static final String hhmmFormat="HH:mm"; public static final String MMddFormat="MM-dd"; public static final String yyyyFormat="yyyy"; public static final String yyyyChineseFormat="yyyy年"; public static final String yyyyMMddFormat="yyyy-MM-dd"; public static final String fullFormat="yyyy-MM-dd HH:mm:ss"; public static final String MMddChineseFormat="MM月dd日"; public static final String yyyyMMddHHmmChineseFormat="yyyy年MM月dd日 HH时mm分"; public static final String yyyyMMddChineseFormat="yyyy年MM月dd日"; public static final String fullChineseFormat="yyyy年MM月dd日 HH时mm分ss秒"; public static final String yyyyMMddHHmmssSSS = "yyyy-MM-dd HH:mm:ss:SSS"; public static final String [] WEEKS={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; public static final String NO_SEPARATOR="yyyyMMddHHmmss"; public static final String NO_SEPARATOR_SSS="yyyyMMddHHmmssSSS"; public static final Long mills4oneHour = 60 * 60 * 1000l; public static final Float mills4oneMinuteFloat = 60 * 1000f; public static final Float mills4oneHourFloat = 60 * 60 * 1000f; public static final long mills4oneDay = 24 * mills4oneHourFloat.longValue(); public static final float mills4oneDayFloat = 24 * mills4oneHourFloat; public static final String yyyyMMddHHmm="yyyy-MM-dd HH:mm"; private static ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<>(); /** * 返回当前日期 格式参照fullFormat * @return */ public static String curDateStr(){ DateFormat df=new SimpleDateFormat(fullFormat); return df.format(new Date()); } /** * 得到指定时间的时间日期格式 * @param date 指定的时间 * @param format 时间日期格式 * @return */ public static String getFormatDateTime(Date date,String format){ DateFormat df=new SimpleDateFormat(format); return df.format(date); } /** * 判断是否是润年 * @param date 指定的时间 * @return true:是润年,false:不是润年 */ public static boolean isLeapYear(Date date) { Calendar cal=Calendar.getInstance(); cal.setTime(date); return isLeapYear(cal.get(Calendar.YEAR)); } /** * 判断是否是润年 * @param year 指定的年 * @return true:是润年,false:不是润年 */ public static boolean isLeapYear(int year) { GregorianCalendar calendar = new GregorianCalendar(); return calendar.isLeapYear(year); } /** * 判断指定的时间是否是今天 * @param date 指定的时间 * @return true:是今天,false:非今天 */ public static boolean isInToday(Date date){ boolean flag=false; Date now=new Date(); String fullFormat=getFormatDateTime(now, DateUtil.yyyyMMddFormat); String beginString=fullFormat+" 00:00:00"; String endString=fullFormat+" 23:59:59"; DateFormat df=new SimpleDateFormat(DateUtil.fullFormat); try { Date beginTime=df.parse(beginString); Date endTime=df.parse(endString); flag=date.before(endTime)&&date.after(beginTime); } catch (ParseException e) { e.printStackTrace(); } return flag; } /** * 判断两时间是否是同一天 * @param from 第一个时间点 * @param to 第二个时间点 * @return true:是同一天,false:非同一天 */ public static boolean isSameDay(Date from,Date to){ boolean isSameDay=false; DateFormat df=new SimpleDateFormat(DateUtil.yyyyMMddFormat); String firstDate=df.format(from); String secondDate=df.format(to); isSameDay=firstDate.equals(secondDate); return isSameDay; } /** * 求出指定的时间那天是星期几 * @param date 指定的时间 * @return 星期X */ public static String getWeekString(Date date){ return DateUtil.WEEKS[getWeek(date)-1]; } /** * 求出指定时间那天是星期几 * @param date 指定的时间 * @return 1-7 */ public static int getWeek(Date date){ int week=0; Calendar cal=Calendar.getInstance(); cal.setTime(date); week=cal.get(Calendar.DAY_OF_WEEK); return week; } /** * 取得指定时间离现在是多少时间以前,如:3秒前,2小时前等 * 注意:此计算方法不是精确的 * @param date 已有的指定时间 * @return 时间段描述 */ public static String getAgoTimeString(Date date){ Date now=new Date(); Calendar cal=Calendar.getInstance(); cal.setTime(date); Date agoTime=cal.getTime(); long mtime=now.getTime()-agoTime.getTime(); String str=""; long stime=mtime/1000; long minute=60; long hour=60*60; long day=24*60*60; long weeks=7*24*60*60; long months=100*24*60*60; if(stime<minute){ long time_value=stime; if(time_value<=0){ time_value=1; } str=time_value+"秒前"; }else if(stime>=minute && stime<hour){ long time_value=stime/minute; if(time_value<=0){ time_value=1; } str=time_value+"分前"; }else if(stime>=hour && stime<day){ long time_value=stime/hour; if(time_value<=0){ time_value=1; } str=time_value+"小时前"; }else if(stime>=day&&stime<weeks){ long time_value=stime/day; if(time_value<=0){ time_value=1; } str=time_value+"天前"; }else if(stime>=weeks&&stime<months){ DateFormat df=new SimpleDateFormat(DateUtil.MMddFormat); str=df.format(date); }else{ DateFormat df=new SimpleDateFormat(DateUtil.yyyyMMddFormat); str=df.format(date); } return str; } /** * 判断指定时间是否是周末 * @param date 指定的时间 * @return true:是周末,false:非周末 */ public static boolean isWeeks(Date date){ boolean isWeek=false; isWeek=(getWeek(date)-1==0||getWeek(date)-1==6); return isWeek; } /** * 得到今天的最开始时间 * @return 今天的最开始时间 */ public static Date getTodayBeginTime(){ String beginString= DateUtil.yyyyMMddFormat+" 00:00:00"; DateFormat df=new SimpleDateFormat(DateUtil.fullFormat); Date beginTime=new Date(); try { beginTime=df.parse(beginString); } catch (ParseException e) { e.printStackTrace(); } return beginTime; } /** * 得到今天的最开始时间 * @return 今天的最开始时间 */ public static Date getDateBeginTime(Date date){ String dateString= DateFormatUtils.format(date, "yyyy-MM-dd 00:00:00"); Date beginTime=null; try { beginTime= DateUtils.parseDate(dateString, new String[]{"yyyy-MM-dd hh:mm:ss"}); } catch (ParseException e) { e.printStackTrace(); } return beginTime; } /** * 得到今天的最后结束时间 * @return 今天的最后时间 */ public static Date getTodayEndTime(){ String endString= DateUtil.yyyyMMddFormat+" 23:59:59"; DateFormat df=new SimpleDateFormat(DateUtil.fullFormat); Date endTime=new Date(); try { endTime=df.parse(endString); } catch (ParseException e) { e.printStackTrace(); } return endTime; } /** * 得到今天的最后结束时间 * @return 今天的最后时间 */ public static Date getDateEndTime(Date date){ String dateString=DateFormatUtils.format(date, "yyyy-MM-dd 23:59:59"); Date endTime=null; try { endTime=DateUtils.parseDate(dateString, new String[]{"yyyy-MM-dd hh:mm:ss"}); } catch (ParseException e) { e.printStackTrace(); } return endTime; } /** * 取得本周的开始时间 * @return 本周的开始时间 */ public static Date getThisWeekBeginTime(){ Date beginTime=null; Calendar cal=Calendar.getInstance(); int week=getWeek(cal.getTime()); week=week-1; int days=0; if(week==0){ days=6; }else{ days=week-1; } cal.add(Calendar.DAY_OF_MONTH, -days); beginTime=cal.getTime(); return beginTime; } /** * 指定时间获取周开始时间 * @return */ public static Date getWeekBeginTime(Date date){ Date beginTime=null; Calendar cal=Calendar.getInstance(); cal.setTime(date); int week=getWeek(cal.getTime()); week=week-1; int days=0; if(week==0){ days=6; }else{ days=week-1; } cal.add(Calendar.DAY_OF_MONTH, -days); beginTime=cal.getTime(); return beginTime; } /** * 取得本周的开始日期 * @param format 时间的格式 * @return 指定格式的本周最开始时间 */ public static String getThisWeekBeginTimeString(String format){ DateFormat df=new SimpleDateFormat(format); return df.format(getThisWeekBeginTime()); } /** * 取得本周的结束时间 * @return 本周的结束时间 */ public static Date getThisWeekEndTime(){ Date endTime=null; Calendar cal=Calendar.getInstance(); int week=getWeek(cal.getTime()); week=week-1; int days=0; if(week!=0){ days=7-week; } cal.add(Calendar.DAY_OF_MONTH, days); endTime=cal.getTime(); return endTime; } /** * 获取指定时间周的结束时间 * @return */ public static Date getWeekEndTime(Date date){ Date endTime=null; Calendar cal=Calendar.getInstance(); cal.setTime(date); int week=getWeek(cal.getTime()); week=week-1; int days=0; if(week!=0){ days=7-week; } cal.add(Calendar.DAY_OF_MONTH, days); endTime=cal.getTime(); return endTime; } /** * 取得本周的结束日期 * @param format 时间的格式 * @return 指定格式的本周结束时间 */ public static String getThisWeekEndTimeString(String format){ DateFormat df=new SimpleDateFormat(format); return df.format(getThisWeekEndTime()); } /** * 取得两时间相差的天数 * @param from 第一个时间 * @param to 第二个时间 * @return 相差的天数 */ public static long getBetweenDays(Date from, Date to){ long days=0; long dayTime=24*60*60*1000; long fromTime=from.getTime(); long toTime=to.getTime(); long times=Math.abs(fromTime-toTime); days=times/dayTime; return days; } /** * 取得两时间相差的小时数 * @param from 第一个时间 * @param to 第二个时间 * @return 相差的小时数 */ public static long getBetweenHours(Date from,Date to){ long hours=0; long hourTime=60*60*1000; long fromTime=from.getTime(); long toTime=to.getTime(); long times=Math.abs(fromTime-toTime); hours=times/hourTime; return hours; } /** * * @param endDate * @param nowDate * @return 相差分钟数 */ public static Long getBetweenMin(Date endDate, Date nowDate) { long minTime=60*1000; // 获得两个时间的毫秒时间差异 long diff = endDate.getTime() - nowDate.getTime(); // 计算差多少分钟 long min = diff/minTime; return min; } /** * 取得在指定时间上加减days天后的时间 * @param date 指定的时间 * @param days 天数,正为加,负为减 * @return 在指定时间上加减days天后的时间 */ public static Date addDays(Date date,int days){ Date time=null; Calendar cal=Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, days); time=cal.getTime(); return time; } /** * 取得在指定时间上加减months月后的时间 * @param date 指定时间 * @param months 月数,正为加,负为减 * @return 在指定时间上加减months月后的时间 */ public static Date addMonths(Date date,int months){ Date time=null; Calendar cal=Calendar.getInstance(); cal.add(Calendar.MONTH, months); time=cal.getTime(); return time; } /** * 取得在指定时间上加减years年后的时间 * @param date 指定时间 * @param years 年数,正为加,负为减 * @return 在指定时间上加减years年后的时间 */ public static Date addYears(Date date,int years){ Date time=null; Calendar cal=Calendar.getInstance(); cal.add(Calendar.YEAR, years); time=cal.getTime(); return time; } public static long toMillis(String dateStr) throws ParseException{ SimpleDateFormat format = new SimpleDateFormat(yyyyMMddHHmmssSSS); Date date = format.parse(dateStr); return date.getTime(); } /** * 获取某个时刻的毫秒值 * @param clock * @return */ public long getClockTimeMills(Integer clock){ Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, clock); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal.getTimeInMillis(); } /** * 获取某一天某个时刻的毫秒值 * @param clock * @return */ public long getClockTimeMills(Integer clock, Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, clock); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal.getTimeInMillis(); } /** * 字符串是否符合某格式的日期 * @param str * @param pattern * @return */ public static boolean isDate(String str,String pattern){ if(StringUtils.isBlank(str) || StringUtils.isBlank(pattern) || str.length()!=pattern.length()){ return false; } try { SimpleDateFormat df = new SimpleDateFormat(pattern); df.parse(str); return true; } catch (ParseException e) { return false; } } /** * 获取某个时间点的整数分钟时的毫秒值 * @throws ParseException */ public static long getMills4IntegerMinute() throws ParseException{ SimpleDateFormat sdf = threadLocal.get(); if (sdf == null) { sdf = new SimpleDateFormat(yyyyMMddHHmm); threadLocal.set(sdf); } long result_mills = sdf.parse(sdf.format(new Date())).getTime(); return result_mills; } }