java 常用的时间相关转化

2022-07-30 13:26:42

下面代码的一些变量基本解释说明
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

总结:目前常用到的时间相关的操作大概就是这些,其中一些没有覆盖到的可以通过上面相关操作调整就能得到,如有遗漏请在评论中补充,我及时调整增加。

  • 作者:lyjunpm
  • 原文链接:https://blog.csdn.net/weixin_42127766/article/details/117922566
    更新时间:2022-07-30 13:26:42