|  |  |  | 
|---|
|  |  |  | package com.ard.utils; | 
|---|
|  |  |  | import org.apache.commons.lang3.time.DateFormatUtils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.time.LocalDateTime; | 
|---|
|  |  |  | import java.lang.management.ManagementFactory; | 
|---|
|  |  |  | import java.text.ParseException; | 
|---|
|  |  |  | import java.text.SimpleDateFormat; | 
|---|
|  |  |  | import java.time.*; | 
|---|
|  |  |  | import java.time.format.DateTimeFormatter; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @Description: 时间处理工具 | 
|---|
|  |  |  | * @ClassName: DateUtils | 
|---|
|  |  |  | * @Author: 刘苏义 | 
|---|
|  |  |  | * @Date: 2023年06月06日10:04 | 
|---|
|  |  |  | * @Version: 1.0 | 
|---|
|  |  |  | **/ | 
|---|
|  |  |  | public class DateUtils { | 
|---|
|  |  |  | * @ClassName DateUtils | 
|---|
|  |  |  | * @Description: 这是一个时间工具类 | 
|---|
|  |  |  | * @Author 刘苏义 | 
|---|
|  |  |  | * @Date 2023/2/16 21:58 | 
|---|
|  |  |  | * @Version 1.0 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public class DateUtils extends org.apache.commons.lang3.time.DateUtils | 
|---|
|  |  |  | { | 
|---|
|  |  |  | public static String YYYY = "yyyy"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static String YYYY_MM = "yyyy-MM"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static String YYYY_MM_DD = "yyyy-MM-dd"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static String[] parsePatterns = { | 
|---|
|  |  |  | "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", | 
|---|
|  |  |  | "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", | 
|---|
|  |  |  | "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取当前Date型日期 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @return Date() 当前日期 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static Date getNowDate() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return new Date(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取当前日期, 默认格式为yyyy-MM-dd | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @return String | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static String getDate() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return dateTimeNow(YYYY_MM_DD); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static final String getTime() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return dateTimeNow(YYYY_MM_DD_HH_MM_SS); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static final String dateTimeNow() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return dateTimeNow(YYYYMMDDHHMMSS); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static final String dateTimeNow(final String format) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return parseDateToStr(format, new Date()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static final String dateTime(final Date date) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return parseDateToStr(YYYY_MM_DD, date); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static final String parseDateToStr(final String format, final Date date) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return new SimpleDateFormat(format).format(date); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static final Date dateTime(final String format, final String ts) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return new SimpleDateFormat(format).parse(ts); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (ParseException e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new RuntimeException(e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 日期路径 即年/月/日 如2018/08/08 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static final String datePath() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | return DateFormatUtils.format(now, "yyyy/MM/dd"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 日期路径 即年/月/日 如20180808 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static final String dateTime() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | return DateFormatUtils.format(now, "yyyyMMdd"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 日期型字符串转化为日期 格式 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static Date parseDate(Object str) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (str == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return parseDate(str.toString(), parsePatterns); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (ParseException e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取服务器启动时间 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static Date getServerStartDate() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | long time = ManagementFactory.getRuntimeMXBean().getStartTime(); | 
|---|
|  |  |  | return new Date(time); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 计算相差天数 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static int differentDaysByMillisecond(Date date1, Date date2) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 计算两个时间差 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static String getDatePoor(Date endDate, Date nowDate) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | long nd = 1000 * 24 * 60 * 60; | 
|---|
|  |  |  | long nh = 1000 * 60 * 60; | 
|---|
|  |  |  | long nm = 1000 * 60; | 
|---|
|  |  |  | // long ns = 1000; | 
|---|
|  |  |  | // 获得两个时间的毫秒时间差异 | 
|---|
|  |  |  | long diff = endDate.getTime() - nowDate.getTime(); | 
|---|
|  |  |  | // 计算差多少天 | 
|---|
|  |  |  | long day = diff / nd; | 
|---|
|  |  |  | // 计算差多少小时 | 
|---|
|  |  |  | long hour = diff % nd / nh; | 
|---|
|  |  |  | // 计算差多少分钟 | 
|---|
|  |  |  | long min = diff % nd % nh / nm; | 
|---|
|  |  |  | // 计算差多少秒//输出结果 | 
|---|
|  |  |  | // long sec = diff % nd % nh % nm / ns; | 
|---|
|  |  |  | return day + "天" + hour + "小时" + min + "分钟"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 增加 LocalDateTime ==> Date | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static Date toDate(LocalDateTime temporalAccessor) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); | 
|---|
|  |  |  | return Date.from(zdt.toInstant()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 增加 LocalDate ==> Date | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static Date toDate(LocalDate temporalAccessor) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); | 
|---|
|  |  |  | ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); | 
|---|
|  |  |  | return Date.from(zdt.toInstant()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //SDK时间解析 | 
|---|
|  |  |  | public static String parseTime(int time) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | int year=(time>>26)+2000; | 
|---|
|  |  |  | int month=(time>>22)&15; | 
|---|
|  |  |  | int day=(time>>17)&31; | 
|---|
|  |  |  | int hour=(time>>12)&31; | 
|---|
|  |  |  | int min=(time>>6)&63; | 
|---|
|  |  |  | int second=(time>>0)&63; | 
|---|
|  |  |  | String sTime=String.format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, min, second); | 
|---|
|  |  |  | return sTime; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 日期字符串的月日时分秒自动补零,并将/替换成- | 
|---|
|  |  |  | * "yyyy/M/d H:m:s" to "yyyy-MM-dd HH:mm:ss" | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public static String convertDate(String startDate) { | 
|---|
|  |  |  | DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy/M/d H:m:s"); | 
|---|
|  |  |  | DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
|---|
|  |  |  | return LocalDateTime.parse(startDate, inputFormat).format(outputFormat); | 
|---|
|  |  |  | public static String convertDate(String startDate,String inputFormat) { | 
|---|
|  |  |  | DateTimeFormatter inputdtf = DateTimeFormatter.ofPattern(inputFormat); | 
|---|
|  |  |  | DateTimeFormatter outputdtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
|---|
|  |  |  | return LocalDateTime.parse(startDate, inputdtf).format(outputdtf); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|