下面代码的一些变量基本解释说明
datePattern:时间对应的字符串格式
date: 时间
dateStr:字符串格式的时间
指定的几个常量:
publicstaticfinallong DAYTIMESTAMP=24*60*60*1000L;publicstaticfinalString SHORTDATEFORMATER="yyyy-MM-dd";publicstaticfinalString LONGDATEFORMATER="yyyy-MM-dd HH:mm:ss";
1.时间转化为指定格式的字符串
publicstaticfinalStringconvertDateToString(String datePattern,Date date){String returnValue=null;if(date!=null){SimpleDateFormat df=newSimpleDateFormat(datePattern);
returnValue= df.format(date);}return(returnValue);}
2.指定格式的字符串转时间
publicstaticfinalDateconvertStringToDate(String datePattern,String dateStr){if(StringUtils.isBlank(dateStr)){returnnull;}SimpleDateFormat df=null;Date date=null;
df=newSimpleDateFormat(datePattern);try{
date= df.parse(dateStr);}catch(ParseException pe){
log.error("异常![{}]",pe);returnnull;}return(date);}
3.判断日期是否未过期
publicstaticfinalbooleanisNonExpired(Date date){Calendar calendarNow=Calendar.getInstance();
calendarNow.setTime(calendarNow.getTime());Calendar calendarGiven=Calendar.getInstance();
calendarGiven.setTime(date);return calendarNow.before(calendarGiven);}
4.判断日期是否过期
publicstaticfinalbooleanisExpired(Date date){Calendar calendarNow=Calendar.getInstance();
calendarNow.setTime(calendarNow.getTime());Calendar calendarGiven=Calendar.getInstance();
calendarGiven.setTime(date);return calendarNow.after(calendarGiven);}
5.判断两个日期大小
publicstaticfinalintcompare(Date firstDate,Date secondDate){return firstDate.compareTo(secondDate);}
备注:如果第一个日期参数大于第二个日期返回 1;如果两个日期相等返回0;如果第一个日期小于第二个日期 返回-1
6.获取指定时间前n个月的时间
publicstaticDateDateMinus(Date date,int month){Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH,-month);return calendar.getTime();}
7.获取指定日期之前指定天,包含传入的那一天
publicstaticStringgetDaysBefore(Date date,int days){Date td=newDate(date.getTime()- DAYTIMESTAMP* days);returnDateUtils.convertDateToString(SHORTDATEFORMATER, td);}
8.获取指定日期之前指定天的数组,包含传入的那一天
publicstaticList<String>getDaysBeforeArray(Date date,int days){List<String> resultList=newArrayList<>();for(int i= days-1; i>=0; i--){
resultList.add(getDaysBefore(date, i));}return resultList;}
备注:配合第七条使用
9.获取指定时间的0点
publicstaticDategetDayStartTimeByDate(Date date){Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY,0);
calendar.set(Calendar.MINUTE,0);
calendar.set(Calendar.SECOND,0);return calendar.getTime();}
10.获取指定日期的最后一秒
publicstaticDategetDayEndOfDay(Date date){Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY,23);
calendar.set(Calendar.MINUTE,59);
calendar.set(Calendar.SECOND,59);return calendar.getTime();}
11.获取当时时间前一个小时时间
publicstaticDategetDayBeforeHour(){Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,calendar.get(Calendar.HOUR_OF_DAY)-1);return calendar.getTime();}
12.获取两个时间之间相差的分钟数
publicstaticStringgetdifferMinute(Date endDate,Date nowDate){long nm=1000*60;// 获得两个时间的毫秒时间差异long diff= endDate.getTime()- nowDate.getTime();returnString.valueOf(diff/nm);}
备注:endDate 相对大的时间;nowDate 相对小的时间;可以在入参的时候就判断好,或者可以在方法内优化,即调用第五条操作根据返回值进行操作就可以。
13.获取两个时间之间间隔多少天
publicstaticintdifferentDaysByMillisecond(Date date1,Date date2){return(int)((date2.getTime()- date1.getTime())/(1000*3600*24));}
14.获取两个时间之间的日期集合
publicstaticList<Date>getDatesBetweenTwoDate(Date beginDate,Date endDate){List<Date> dates=newArrayList<>();try{
dates.add(beginDate);// 把开始时间加入集合Calendar cal=Calendar.getInstance();// 使用给定的 Date 设置此 Calendar 的时间
cal.setTime(beginDate);while(true){// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
cal.add(Calendar.DAY_OF_MONTH,1);// 测试此日期是否在指定日期之后if(endDate.after(cal.getTime())){
dates.add(cal.getTime());}else{break;}}
dates.add(endDate);// 把结束时间加入集合}catch(Exception e){
log.error("获取时间集合异常");}return dates;}
15.获取当月月初第一天
publicstaticStringgetMonthFirstDay(){SimpleDateFormat format=newSimpleDateFormat(SHORTDATEFORMATER);Calendar c=Calendar.getInstance();
c.add(Calendar.MONTH,0);
c.set(Calendar.DAY_OF_MONTH,1);// 设置为1号,当前日期既为本月第一天return format.format(c.getTime());}
16.时间戳格式化
publicstaticStringparseDate(Long timeStamp){String resDate="";if(null!= timeStamp){Date date=newDate(timeStamp);SimpleDateFormat smf=newSimpleDateFormat(LONGDATEFORMATER);
resDate= smf.format(date);}return resDate;}
17.获取今天是当前年第n周
publicstaticintgetWeekOfYear(String dateStr,int startCalendar){SimpleDateFormat format=newSimpleDateFormat(SHORTDATEFORMATER);Calendar calendar=Calendar.getInstance();try{Date date= format.parse(dateStr);
calendar.setFirstDayOfWeek(startCalendar);
calendar.setTime(date);}catch(Exception error){
error.printStackTrace();}return calendar.get(Calendar.WEEK_OF_YEAR);}
备注:startCalendar是指从周几作为本周的开始周期 例:以周五作为一周的开始则startCalendar传值为Calendar.FRIDAY
总结:目前常用到的时间相关的操作大概就是这些,其中一些没有覆盖到的可以通过上面相关操作调整就能得到,如有遗漏请在评论中补充,我及时调整增加。