New file |
| | |
| | | package com.panzhihua.common.utlis; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.*; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | |
| | | @Slf4j |
| | | public class DateUtils { |
| | | |
| | | |
| | | public static DateTimeFormatter format_ymdhms = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | |
| | | private static DateTimeFormatter format_ymdhmssss = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); |
| | | |
| | | private static DateTimeFormatter format_ymds = DateTimeFormatter.ofPattern("yyyyMMdd"); |
| | | |
| | | public static DateTimeFormatter format_ymd = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
| | | |
| | | public static DateTimeFormatter format_ymdhms_string = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); |
| | | |
| | | public static DateTimeFormatter format_ymdhms_no_signal = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); |
| | | |
| | | public static SimpleDateFormat yyyyMMdd_format = new SimpleDateFormat("yyyy-MM-dd"); |
| | | |
| | | public static SimpleDateFormat yyyy_MM_dd_format = new SimpleDateFormat("yyyy/MM/ddHH:mm:ss"); |
| | | |
| | | public static SimpleDateFormat ymdhms_format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | |
| | | public static DateTimeFormatter format_ymd_String = DateTimeFormatter.ofPattern("yyMMdd"); |
| | | |
| | | |
| | | |
| | | /** |
| | | * 将日期对象格式化成指定的字符串格式 |
| | | * |
| | | * @param date 日期对象 |
| | | * @param formatString 格式化字符串 |
| | | * @return String |
| | | */ |
| | | public static String getDateFormatString(Date date, String formatString) { |
| | | |
| | | String dateString = ""; |
| | | SimpleDateFormat format = new SimpleDateFormat(formatString); |
| | | if (date != null) { |
| | | dateString = format.format(date); |
| | | } |
| | | return dateString; |
| | | } |
| | | |
| | | /** |
| | | * 字符串转date |
| | | * @param date 时间戳 |
| | | * @param format format |
| | | * @return 时间 |
| | | */ |
| | | public static Date stringToDate(String date,SimpleDateFormat format){ |
| | | try { |
| | | if(StringUtils.isBlank(date)){ |
| | | return null; |
| | | } |
| | | return format.parse(date); |
| | | } catch (ParseException e) { |
| | | log.error(e.getMessage(),e); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 字符串转date |
| | | * @param date 时间戳 |
| | | * @return 时间 |
| | | */ |
| | | public static Date stringToDateStandard (String date){ |
| | | SimpleDateFormat format = ymdhms_format; |
| | | if(StringUtils.isNotBlank(date)){ |
| | | if(date.split("-").length==3){ |
| | | if(date.split(":").length!=3){ |
| | | format = yyyyMMdd_format; |
| | | } |
| | | }else if(date.split("-").length==2){ |
| | | format = new SimpleDateFormat("yyyy-MM"); |
| | | } |
| | | try { |
| | | return format.parse(date); |
| | | } catch (ParseException e) { |
| | | log.error(e.getMessage(),e); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 字符串转date |
| | | * @param date 时间戳 |
| | | * @return 时间 |
| | | */ |
| | | public static Date stringToDateStandardByYYYY_MM_dd (String date){ |
| | | SimpleDateFormat format = yyyy_MM_dd_format; |
| | | if(StringUtils.isNotBlank(date)){ |
| | | try { |
| | | return format.parse(date); |
| | | } catch (ParseException e) { |
| | | log.error(e.getMessage(),e); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取当前时间 |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static LocalDateTime getCurrentDate(){ |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | return now; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前时间字符串,格式为yyyy-MM-dd HH:mm:ss |
| | | * @return |
| | | */ |
| | | public static String getCurrentDateStr(){ |
| | | String nowtime=getCurrentDate().format(format_ymdhms); |
| | | return nowtime; |
| | | } |
| | | |
| | | public static String getCurrentDateymd(){ |
| | | String nowtime=getCurrentDate().format(format_ymdhms_string); |
| | | return nowtime; |
| | | } |
| | | |
| | | public static String getCurrentDateyymd(){ |
| | | String nowtime=getCurrentDate().format(format_ymd_String); |
| | | return nowtime; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前时间字符串,格式为yyyyMMdd |
| | | * @return |
| | | */ |
| | | public static String getCurrentDateString(){ |
| | | String nowtime=getCurrentDate().format(format_ymds); |
| | | return nowtime; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取当前时间字符串,格式为yyyy-MM-dd |
| | | * @return |
| | | */ |
| | | public static String getCurrentDateStrymd(){ |
| | | String nowtime=getCurrentDate().format(format_ymd); |
| | | return nowtime; |
| | | } |
| | | |
| | | public static String getCurrentDateStr_MS(){ |
| | | String nowtime=getCurrentDate().format(format_ymdhmssss); |
| | | return nowtime; |
| | | } |
| | | |
| | | /** |
| | | * 获取当前时间long值 |
| | | * @return |
| | | */ |
| | | public static long getCurrentDataLong(){ |
| | | return new Date().getTime(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 获取当前时间 |
| | | * @param format |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static Date getCurrentDate(SimpleDateFormat format){ |
| | | String tempDate = format.format(new Date()); |
| | | try { |
| | | return format.parse(tempDate); |
| | | } catch (ParseException e) { |
| | | log.error(e.getMessage(),e); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * @param date |
| | | * @param newFormat |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static Date getDate(Date date, SimpleDateFormat newFormat) { |
| | | String tempDate = newFormat.format(date); |
| | | try { |
| | | return newFormat.parse(tempDate); |
| | | } catch (ParseException e) { |
| | | log.error(e.getMessage(),e); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public static String format(Date date, SimpleDateFormat format) { |
| | | if(null == date){ |
| | | return ""; |
| | | } |
| | | return format.format(date); |
| | | } |
| | | |
| | | /** |
| | | * 将给定的时间秒转换为中文格式的时分秒 |
| | | * |
| | | * @param second |
| | | * @return |
| | | */ |
| | | public static String formatSecond_ZH_HMS(Integer second) { |
| | | String result = "0秒"; |
| | | if (null != second) { |
| | | int hours = (int) (second / (60 * 60)); |
| | | int minutes = (int) (second / 60 - hours * 60); |
| | | int seconds = (int) (second - minutes * 60 - hours * 60 * 60); |
| | | |
| | | String format; |
| | | Object[] array; |
| | | |
| | | if (hours > 0) { |
| | | format = "%1$,d时%2$,d分%3$,d秒"; |
| | | array = new Object[]{hours, minutes, seconds}; |
| | | } else if (minutes > 0) { |
| | | format = "%1$,d分%2$,d秒"; |
| | | array = new Object[]{minutes, seconds}; |
| | | } else { |
| | | format = "%1$,d秒"; |
| | | array = new Object[]{seconds}; |
| | | } |
| | | result = String.format(format, array); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 对日期进行加法操作 |
| | | * |
| | | * @param date |
| | | * @param days |
| | | * @return |
| | | */ |
| | | public static Date addDay(Date date, Integer days) { |
| | | if (null != date) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.add(Calendar.DATE, days); |
| | | return cal.getTime(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 对日期进行加法操作 |
| | | * |
| | | * @param date |
| | | * @param month |
| | | * @return |
| | | */ |
| | | public static Date addMonth(Date date, Integer month) { |
| | | if (null != date) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.add(Calendar.MONTH, month); |
| | | return cal.getTime(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 对日期进行加法操作 |
| | | * @param date |
| | | * @param hours |
| | | * @return |
| | | */ |
| | | public static Date addHours(Date date, Integer hours) { |
| | | if (null != date) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.add(Calendar.HOUR_OF_DAY, hours); |
| | | return cal.getTime(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 对日期的分钟进行加法操作 |
| | | * @param date |
| | | * @param minutes |
| | | * @return |
| | | */ |
| | | public static Date addMinutes(Date date, Integer minutes) { |
| | | if (null != date) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | cal.add(Calendar.MINUTE, minutes); |
| | | return cal.getTime(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 比较两个日期的大小 |
| | | * |
| | | * @param date1 |
| | | * @param date2 |
| | | * @return 日期相等,返回0;前者大,返回1;后者大,返回-1; |
| | | */ |
| | | public static int dateCompare(Date date1, Date date2) { |
| | | Calendar c1 = Calendar.getInstance(); |
| | | c1.setTime(date1); |
| | | |
| | | Calendar c2 = Calendar.getInstance(); |
| | | c2.setTime(date2); |
| | | |
| | | return c1.compareTo(c2); |
| | | } |
| | | |
| | | /** |
| | | * 判断当前日期是否在指定日期区域内(包含起止日期) [startDate,endDate] |
| | | * <p/> |
| | | * [null,null] --> return 1; |
| | | * |
| | | * @param now |
| | | * @param startDate |
| | | * @param endDate |
| | | * @return -1:超出并小于startDate;0:在范围内;1:超出并大于endDate; |
| | | */ |
| | | public static int validateDate(Date now, Date startDate, Date endDate) { |
| | | if (null == startDate && null == endDate) { |
| | | return 0; |
| | | } |
| | | if (null == startDate) { |
| | | //当前时间大于endDate |
| | | if (dateCompare(now, endDate) == 1) { |
| | | return 1; |
| | | } else { |
| | | return 0; |
| | | } |
| | | } else { |
| | | if (null == endDate) { |
| | | //当前时间小于startDate |
| | | if (dateCompare(startDate, now) == 1) { |
| | | return -1; |
| | | } else { |
| | | return 0; |
| | | } |
| | | } else { |
| | | if (dateCompare(startDate, now) == 1) { |
| | | return -1; |
| | | } else if (dateCompare(now, endDate) == 1) { |
| | | return 1; |
| | | } else { |
| | | return 0; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 计算两个日期先差多少秒 |
| | | * @param pre 前一个日期 |
| | | * @param after 后一个日期 |
| | | * @return |
| | | */ |
| | | public static long calTimeDifference(Date pre,Date after){ |
| | | return (after.getTime()-pre.getTime())/1000; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 计算两个时间相差的天数 |
| | | * @param stardate |
| | | * @param enddate |
| | | * @return |
| | | */ |
| | | public static int getHour(Date stardate,Date enddate){ |
| | | long nd = 1000 * 24 * 60 * 60; |
| | | long nh = 1000 * 60 * 60; |
| | | long nm = 1000 * 60; |
| | | long diff=enddate.getTime()-stardate.getTime(); |
| | | |
| | | long day = diff / nd; |
| | | |
| | | long hour = diff % nd / nh; |
| | | |
| | | long min = diff % nd % nh / nm; |
| | | |
| | | return (int)day; |
| | | } |
| | | |
| | | /** |
| | | * 结束时间与当前时间计算相差的月数 |
| | | * @param enddate |
| | | * @return |
| | | */ |
| | | public static int getMonthSpace(String enddate, DateTimeFormatter format) { |
| | | LocalDate formatted = LocalDate.parse(enddate,format); |
| | | LocalDate today = LocalDate.now(); |
| | | Period per = Period.between(today,formatted); |
| | | if(per.getYears() == 0 ){ |
| | | return per.getMonths(); |
| | | }else if(per.getYears() > 0 ){ |
| | | return (per.getYears() * 12) + per.getMonths(); |
| | | } |
| | | |
| | | return (per.getYears() * 12) + per.getMonths(); |
| | | } |
| | | |
| | | /** |
| | | * 获取某个时间段之前的时间点 |
| | | * @return |
| | | */ |
| | | public static String getSomeTimeStapStr(String sign){ |
| | | LocalDateTime beginDateTime =null; |
| | | if (sign.equals("day")) {//一天前时间 |
| | | beginDateTime =LocalDateTime.now().minusDays(1L); |
| | | }else if(sign.equals("week")){ |
| | | beginDateTime =LocalDateTime.now().minusWeeks(1L); |
| | | }else if (sign.equals("month")) { |
| | | beginDateTime =LocalDateTime.now().minusMonths(1L); |
| | | }else if (sign.equals("year")) { |
| | | beginDateTime =LocalDateTime.now().minusYears(1L); |
| | | } |
| | | String beginTime=beginDateTime.format(format_ymdhms); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | try { |
| | | long timestap = sdf.parse(beginTime).getTime(); |
| | | beginTime = timestap+""; |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return beginTime; |
| | | } |
| | | |
| | | public static String getSomeTimeDateStr(String sign){ |
| | | String beginTime=""; |
| | | LocalDateTime beginDateTime =null; |
| | | if (sign.equals("day")) {//一天前时间 |
| | | beginDateTime =LocalDateTime.now().minusDays(1L); |
| | | }else if(sign.equals("week")){ |
| | | beginDateTime =LocalDateTime.now().minusWeeks(1L); |
| | | }else if (sign.equals("month")) { |
| | | beginDateTime =LocalDateTime.now().minusMonths(1L); |
| | | }else if (sign.equals("year")) { |
| | | beginDateTime =LocalDateTime.now().minusYears(1L); |
| | | } |
| | | if (beginDateTime!=null) { |
| | | beginTime = beginDateTime.format(format_ymdhms); |
| | | } |
| | | return beginTime; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取失效时间点(在什么时间失效) |
| | | * @param minutes 有效分钟数 |
| | | * @return |
| | | */ |
| | | public static LocalDateTime getInvalidLocalDateTime(Long minutes){ |
| | | return LocalDateTime.now().minusMinutes(minutes); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取当前年份 |
| | | * @return |
| | | */ |
| | | public static String getCurrentYear(){ |
| | | Calendar instance = Calendar.getInstance(); |
| | | return instance.get(Calendar.YEAR)+""; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取当前月份 |
| | | * @return |
| | | */ |
| | | public static String getCurrentMonth(){ |
| | | Calendar instance = Calendar.getInstance(); |
| | | int month = instance.get(Calendar.MONTH); |
| | | String result; |
| | | if (month < 10){ |
| | | result = "0" + month; |
| | | }else { |
| | | result = month+""; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** 获取无符号的当前时间 |
| | | * @return |
| | | */ |
| | | public static String getCurrentDateStrNoSignal(){ |
| | | return getCurrentDate().format(format_ymdhms_no_signal); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取前几个小时的时间 |
| | | * @param hours |
| | | * @return |
| | | */ |
| | | public static String getNextHourDateStrNoSignal(long hours){ |
| | | return LocalDateTime.now().plusHours(hours).format(format_ymdhms_no_signal); |
| | | } |
| | | |
| | | |
| | | public static Date localDateTimeToDate(LocalDateTime localDateTime) { |
| | | ZoneId zone = ZoneId.systemDefault(); |
| | | Instant instant = localDateTime.atZone(zone).toInstant(); |
| | | return Date.from(instant); |
| | | } |
| | | |
| | | /** |
| | | * 小时取整 |
| | | * @param date |
| | | * @param hour |
| | | * @return |
| | | */ |
| | | public static Date integralHour(Date date,Integer hour) { |
| | | if(date==null||hour==null){ |
| | | return null; |
| | | } |
| | | long l = date.getTime()- 1; |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:00:00"); |
| | | try { |
| | | Date parse = sdf.parse(sdf.format(new Date(l))); |
| | | return addHours(parse, hour); |
| | | } catch (ParseException e) { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 分钟取整 |
| | | * 以十分钟为单位 ,去除尾端,加上 参数 46->40+minutes*10 |
| | | * @param date |
| | | * @param minutes |
| | | * @return |
| | | */ |
| | | public static Date integral10Min(Date date,Integer minutes) { |
| | | if(date==null||minutes==null){ |
| | | return null; |
| | | } |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | int i = cal.get(Calendar.MINUTE);//获取分钟 |
| | | if(i%10==0){ |
| | | minutes--; |
| | | } |
| | | minutes=minutes*10-i%10; |
| | | long l = date.getTime()- 1; |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:00"); |
| | | try { |
| | | Date parse = sdf.parse(sdf.format(new Date(l))); |
| | | return addMinutes(parse, minutes); |
| | | } catch (ParseException e) { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 天数取整 |
| | | * @param date |
| | | * @param day |
| | | * @return |
| | | */ |
| | | public static Date integralDay(Date date,Integer day) { |
| | | if(date==null||day==null){ |
| | | return null; |
| | | } |
| | | long l = date.getTime()- 1; |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); |
| | | try { |
| | | Date parse = sdf.parse(sdf.format(new Date(l))); |
| | | return addDay(parse, day); |
| | | } catch (ParseException e) { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | public static void main(String[]args)throws Exception{ |
| | | // Date date= new Date(); |
| | | // Date after = new Date(); |
| | | // System.out.println(calTimeDifference(date,after)); |
| | | |
| | | } |
| | | } |
| | | |