时间工具类

    技术2025-07-22  8

    import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * @author * @ClassName: 时间工具类 * @Description: * @date */ public class TimeUtil { /** * @Title: getCurrentTime * @Description: 获得当前日期 yyyy-MM-dd HH:mm:ss * @author:w * @Param [] * @date 2020/7/4 8:51 * @return java.lang.String 2020-08-27 14:12:40 * @throws */ public static String getCurrentTime() { // 小写的hh取得12小时,大写的HH取的是24小时 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(); return df.format(date); } /** * @Title: getCurrentTime * @Description: 获取系统当前时间戳 * @author:w * @Param [] * @date 2020/7/4 8:51 * @return java.lang.String 1566889186583 * @throws */ public static String getSystemTime() { String current = String.valueOf(System.currentTimeMillis()); return current; } /** * @Title: getDateByString * @Description: 获取当前日期 yy-MM-dd * @author:w * @Param [] * @date 2020/7/4 8:52 * @return java.lang.String 2020-08-27 * @throws */ public static String getDateByString() { Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(date); } /** * @Title: getDistanceTime * @Description: 获取两个时间相差几分钟 * @author:w * @Param [oldTime, newTime] 2020-06-27 14:12:40, 2020-08-27 14:12:40 * @date 2020/7/4 8:53 * @return long * @throws */ public static long getDistanceTime(String oldTime,String newTime){ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { long NTime =df.parse(newTime).getTime(); //从对象中拿到时间 long OTime = df.parse(oldTime).getTime(); long diff=(NTime-OTime)/1000/60; return diff; } catch (ParseException e) { e.printStackTrace(); return 0; } } /** * @Title: getDistanceTime * @Description: 计算两个时间相差几天 * @author:w * @Param [startTime, endTime] 2020-06-27 14:12:40, 2020-08-27 14:12:40 * @date 2020/7/4 9:08 * @return int * @throws */ public static int getDistanceDay(Date startTime, Date endTime) { int days = 0; long time1 = startTime.getTime(); long time2 = endTime.getTime(); long diff; if (time1 < time2) { diff = time2 - time1; } else { diff = time1 - time2; } days = (int) (diff / (24 * 60 * 60 * 1000)); return days; } /** * @Title: getDistanceMonth * @Description: 计算两个时间相差几个月 * @author:w * @Param [start, end] 2020-06-27 14:12:40, 2020-08-27 14:12:40 * @date 2020/7/4 8:55 * @return int * @throws */ public static int getDistanceMonth(Date start, Date end) { if (start.after(end)) { Date t = start; start = end; end = t; } Calendar startCalendar = Calendar.getInstance(); startCalendar.setTime(start); Calendar endCalendar = Calendar.getInstance(); endCalendar.setTime(end); Calendar temp = Calendar.getInstance(); temp.setTime(end); temp.add(Calendar.DATE, 1); int year = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR); int month = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH); if ((startCalendar.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) == 1)) { return year * 12 + month + 1; } else if ((startCalendar.get(Calendar.DATE) != 1) && (temp.get(Calendar.DATE) == 1)) { return year * 12 + month; } else if ((startCalendar.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) != 1)) { return year * 12 + month; } else { return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month); } } /** * @Title: getDayBeginString * @Description: 获取该天的开始时间 * @author:w * @Param [date] 2020-08-27 14:12:40 * @date 2020/7/4 9:19 * @return java.lang.String * @throws */ public static String getDayBeginString(Date date){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar cal1 = Calendar.getInstance(); cal1.setTime(date); // 将时分秒,毫秒域清零 cal1.set(Calendar.HOUR_OF_DAY, 0); cal1.set(Calendar.MINUTE, 0); cal1.set(Calendar.SECOND, 0); cal1.set(Calendar.MILLISECOND, 0); return sdf.format(cal1.getTime()); } /** * @Title: getDayBeginDate * @Description: 获取该天的开始时间 * @author:w * @Param [date] 2020-08-27 14:12:40 * @date 2020/7/4 9:21 * @return java.util.Date * @throws */ public static Date getDayBeginDate(Date date){ Calendar cal1 = Calendar.getInstance(); cal1.setTime(date); // 将时分秒,毫秒域清零 cal1.set(Calendar.HOUR_OF_DAY, 0); cal1.set(Calendar.MINUTE, 0); cal1.set(Calendar.SECOND, 0); cal1.set(Calendar.MILLISECOND, 0); return cal1.getTime(); } /** * @Title: getDayEndString * @Description: 获取该天的结束时间 * @author:w * @Param [date] 2020-08-27 14:12:40 * @date 2020/7/4 9:10 * @return java.lang.String * @throws */ public static String getDayEndString(Date date){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar cal1 = Calendar.getInstance(); cal1.setTime(date); // 将时分秒,毫秒域清零 cal1.set(Calendar.HOUR_OF_DAY, 23); cal1.set(Calendar.MINUTE, 59); cal1.set(Calendar.SECOND, 59); cal1.set(Calendar.MILLISECOND, 999); return sdf.format(cal1.getTime()); } /** * @Title: getDayEndDate * @Description: 获取该天的结束时间 * @author:w * @Param [date] 2020-08-27 14:12:40 * @date 2020/7/4 9:13 * @return java.util.Date * @throws */ public static Date getDayEndDate(Date date){ Calendar cal1 = Calendar.getInstance(); cal1.setTime(date); // 将时分秒,毫秒域清零 cal1.set(Calendar.HOUR_OF_DAY, 23); cal1.set(Calendar.MINUTE, 59); cal1.set(Calendar.SECOND, 59); cal1.set(Calendar.MILLISECOND, 999); return cal1.getTime(); } /** * @Title: getDaysByYearMonth * @Description: 根据年、月获取当月的天数 * @author:w * @Param [year, month] 2020,10 * @date 2020/7/4 9:25 * @return int * @throws */ public static int getDaysByYearMonth(int year, int month) { Calendar a = Calendar.getInstance(); a.set(Calendar.YEAR, year); a.set(Calendar.MONTH, month - 1); a.set(Calendar.DATE, 1); a.roll(Calendar.DATE, -1); int maxDate = a.get(Calendar.DATE); return maxDate; } /** * @Title: getDayOfWeekByDate * @Description: 获取当前时间是星期几 * @author:w * @Param [date] 2020-07-04 12:00:00 * @date 2020/7/4 9:28 * @return java.lang.String * @throws */ public static String getDayOfWeekByDate(String date) { String dayOfweek = "你耍我"; try { SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); Date myDate = myFormatter.parse(date); SimpleDateFormat formatter = new SimpleDateFormat("E"); String str = formatter.format(myDate); dayOfweek = str; } catch (Exception e) { System.out.println("该时间超出了我的想象!"); } return dayOfweek; } /** * @Title: getWeekBeginDayDate * @Description: 获取该时间所在的周的开始时间(天) * @author:w * @Param [date] 2020-07-04 12:00:00 * @date 2020/7/4 9:34 * @return java.util.Date * @throws */ public static Date getWeekBeginDayDate(Date date) { Calendar cal1 = Calendar.getInstance(); cal1.setTime(date); cal1.setFirstDayOfWeek(Calendar.MONDAY);//星期一是一周的第一天 cal1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); cal1.set(Calendar.HOUR_OF_DAY, 0); cal1.set(Calendar.MINUTE, 0); cal1.set(Calendar.SECOND, 0); cal1.set(Calendar.MILLISECOND, 0); return cal1.getTime(); } /** * @Title: getWeekBeginDayString * @Description: 获取该时间所在的周的开始时间(天) * @author:w * @Param [date] 2020-07-04 12:00:00 * @date 2020/7/4 9:45 * @return java.lang.String 2020-06-29 00:00:00 * @throws */ public static String getWeekBeginDayString(Date date) { SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar cal1 = Calendar.getInstance(); cal1.setTime(date); cal1.setFirstDayOfWeek(Calendar.MONDAY); cal1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); cal1.set(Calendar.HOUR_OF_DAY, 0); cal1.set(Calendar.MINUTE, 0); cal1.set(Calendar.SECOND, 0); cal1.set(Calendar.MILLISECOND, 0); return myFormatter.format(cal1.getTime()); } /** * @Title: getWeekEndDayDate * @Description: 获取当前时间所在周的结束时间(天) * @author:w * @Param [date] 2020-07-04 12:00:00 * @date 2020/7/4 9:48 * @return java.util.Date * @throws */ public static Date getWeekEndDayDate(Date date) { Calendar cal1 = Calendar.getInstance(); cal1.setTime(date); cal1.setFirstDayOfWeek(Calendar.SUNDAY); cal1.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); cal1.set(Calendar.HOUR_OF_DAY, 23); cal1.set(Calendar.MINUTE, 59); cal1.set(Calendar.SECOND, 59); cal1.set(Calendar.MILLISECOND, 999); return cal1.getTime(); } /** * @Title: getWeekEndDayString * @Description: 获取当前时间所在周的结束时间(天) * @author:w * @Param [date] 2020-07-04 12:00:00 * @date 2020/7/4 10:27 * @return java.lang.String * @throws */ public static String getWeekEndDayString(Date date) { SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar cal1 = Calendar.getInstance(); cal1.setTime(date); cal1.setFirstDayOfWeek(Calendar.SUNDAY); cal1.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); cal1.set(Calendar.HOUR_OF_DAY, 23); cal1.set(Calendar.MINUTE, 59); cal1.set(Calendar.SECOND, 59); cal1.set(Calendar.MILLISECOND, 999); return myFormatter.format(cal1.getTime()); } /** * @Title: getBetweenDays * @Description: 获取两个时间区间中的具体日期(天) * @author:w * @Param [startTime, endTime] 2020-07-04 12:00:00, 2020-07-09 12:00:00 * @date 2020/7/4 10:28 * @return java.util.List<java.lang.String> * @throws */ public static List<String> getBetweenDays(String startTime, String endTime) { // 返回的日期集合 List<String> days = new ArrayList<String>(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date start = dateFormat.parse(startTime); Date end = dateFormat.parse(endTime); Calendar tempStart = Calendar.getInstance(); tempStart.setTime(start); Calendar tempEnd = Calendar.getInstance(); tempEnd.setTime(end); tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束) while (tempStart.before(tempEnd)) { days.add(dateFormat.format(tempStart.getTime())); tempStart.add(Calendar.DAY_OF_YEAR, 1); } } catch (ParseException e) { e.printStackTrace(); } return days; } /** * @Title: getStartDayOfWeekNo * @Description: 通过年和该年的第几周获取本周的开始时间 * @author:w * @Param [year, weekNo] 2020,27 * @date 2020/7/4 10:36 * @return java.lang.String 2020-06-29 * @throws */ public static String getStartDayOfWeekNo(int year, int weekNo) { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); cal.set(Calendar.YEAR, year); cal.set(Calendar.WEEK_OF_YEAR, weekNo); return dateFormat.format(dateFormat.parse(cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH))); } catch (ParseException e) { e.printStackTrace(); return "1970-01-01"; } } /** * @Title: getEndDayOfWeekNo * @Description: 通过年和该年的第几周获取本周的结束时间 * @author:w * @Param [year, weekNo] 2020, 27 * @date 2020/7/4 10:40 * @return java.lang.String 2020-07-05 * @throws */ public static String getEndDayOfWeekNo(int year, int weekNo) { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); cal.set(Calendar.YEAR, year); cal.set(Calendar.WEEK_OF_YEAR, weekNo); cal.add(Calendar.DAY_OF_WEEK, 6); return dateFormat.format(dateFormat.parse(cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH))); } catch (ParseException e) { e.printStackTrace(); return "1970-01-01"; } } /** * @Title: getCompareMax * @Description: 日期比较获取较大日期 * @author:w * @Param [beginDate, endDate] * @date 2020/7/4 10:56 * @return java.util.Date * @throws */ public static Date getCompareMax(Date beginDate, Date endDate) { if(beginDate==null) { return endDate; } if(endDate==null) { return beginDate; } if(beginDate.after(endDate)) {//beginDate日期大于endDate return beginDate; } return endDate; } /** * @Title: getCompareMin * @Description: 日期比较获取较小日期 * @author:w * @Param [beginDate, endDate] * @date 2020/7/4 11:01 * @return java.util.Date * @throws */ public static Date getCompareMin(Date beginDate, Date endDate) { if(beginDate==null) { return endDate; } if(endDate==null) { return beginDate; } if(beginDate.after(endDate)) { return endDate; } return beginDate; } /** * @Title: dateFormat * @Description: 时间格式转换(date 转 String) * @author:w * @Param [date] * @date 2020/7/4 11:11 * @return java.lang.String * @throws */ public static String dateFormat(Date date) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = formatter.format(date); return dateString; } /** * @Title: StringToDate * @Description: 时间格式转换(String 转 date) * @author:w * @Param [str] * @date 2020/7/4 11:13 * @return java.util.Date * @throws */ public static Date StringToDate(String str) throws ParseException{ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = formatter.parse(str); return date; } /** * @Title: isEffectiveDate * @Description: 判断某时间是否在一个区间内 * @author:w * @Param [startDate, endDate, time] 开始时间、结束时间、某时间 * @date 2020/7/4 11:17 * @return boolean true表示在区间内 * @throws */ public static boolean isEffectiveDate(Date startDate, Date endDate, Date time ){ if(startDate == null || endDate == null){ return false; } long currentTime = time.getTime(); if(currentTime >= startDate.getTime() && currentTime <= endDate.getTime()){ return true; } return false; } /** * @Title: localDateTime2Date * @Description: 将 LocalDateTime 类型的时间转 Date * @author:w * @Param [localDateTime] 时间 * @date 2020/7/4 11:17 * @return Date格式的时间 * @throws */ public static Date localDateTime2Date(LocalDateTime localDateTime){ return Date.from( localDateTime.atZone( ZoneId.systemDefault()).toInstant());; } /** * @Title: date2LocalDateTime * @Description: 将 Date 类型的时间转 LocalDateTime * @author:w * @Param [date] 时间 * @date 2020/7/4 11:17 * @return LocalDateTime 格式的时间 * @throws */ public static LocalDateTime date2LocalDateTime(Date date){ return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); } public static void main(String[] args) { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { System.out.println(getWeekBeginDayString(new Date())); System.out.println(getBetweenDays("2020-07-04 12:00:00", "2020-07-09 12:00:00")); System.out.println(getStartDayOfWeekNo(2020, 27)); System.out.println(getEndDayOfWeekNo(2020, 27)); System.out.println(getCompareMax(dateFormat.parse("2020-07-04 12:00:00"), dateFormat.parse("2020-07-12 12:00:00"))); System.out.println(isEffectiveDate(dateFormat.parse("2020-07-04 12:00:00"), dateFormat.parse("2020-07-12 12:00:00") , dateFormat.parse("2020-07-05 12:00:00"))); } catch (ParseException e) { e.printStackTrace(); } } /** * 比较时间区间是否冲突 * @param leftStartDate 开始时间 * @param leftEndDate 结束时间 * @return */ public static boolean estimateTimeConflict(Date leftStartDate, Date leftEndDate){ //要比较区间的开始时间 Date rightStartDate = entity.getStartTime(); //要比较区间的结束时间 Date rightEndDate = entity.getEndTime(); if (((leftStartDate.getTime() >= rightStartDate.getTime()) && leftStartDate.getTime() < rightEndDate.getTime()) || ((leftStartDate.getTime() > rightStartDate.getTime()) && leftStartDate.getTime() <= rightEndDate.getTime()) || ((rightStartDate.getTime() >= leftStartDate.getTime()) && rightStartDate.getTime() < leftEndDate.getTime()) || ((rightStartDate.getTime() > leftStartDate.getTime()) && rightStartDate.getTime() <= leftEndDate.getTime())) { System.out.println("存在时间交集"); return true; } return false; } /** * 将String类型的Date转为ISO8601格式 * @param timestamp 时间 * @return */ public String getISO8601TimestampFromDateStr(String timestamp){ java.time.format.DateTimeFormatter dtf1 = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime ldt = LocalDateTime.parse(timestamp,dtf1); ZoneOffset offset = ZoneOffset.of("+08:00"); OffsetDateTime date = OffsetDateTime.of(ldt ,offset); java.time.format.DateTimeFormatter dtf2 = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); return date.format(dtf2 ); } /** * 时间格式转换 * 当前以EEE MMM dd HH:mm:ss zzz yyyy 格式转 yyyy-MM-dd HH:mm:ss 格式 * @param date EEE MMM dd HH:mm:ss zzz yyyy 格式的时间 * @return */ public String getTime(String date){ String time = null; try { Date formDate = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US).parse(date); time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(formDate); } catch (ParseException e) { e.printStackTrace(); } return time; } }
    Processed: 0.010, SQL: 9