DateUtils.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package com.zhiyun.common.utils;
  2. import org.apache.commons.lang3.time.DateFormatUtils;
  3. import java.lang.management.ManagementFactory;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.time.*;
  7. import java.util.Date;
  8. import java.util.LinkedList;
  9. import java.util.List;
  10. /**
  11. * 时间工具类
  12. *
  13. * @author ruoyi
  14. */
  15. public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
  16. public static String YYYY = "yyyy";
  17. public static String YYYY_MM = "yyyy-MM";
  18. public static String YYYY_MM_DD = "yyyy-MM-dd";
  19. public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
  20. public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
  21. private static final String[] parsePatterns = {
  22. "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
  23. "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
  24. "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
  25. /**
  26. * 获取当前Date型日期
  27. *
  28. * @return Date() 当前日期
  29. */
  30. public static Date getNowDate() {
  31. return new Date();
  32. }
  33. /**
  34. * 获取当前日期, 默认格式为yyyy-MM-dd
  35. *
  36. * @return String
  37. */
  38. public static String getDate() {
  39. return dateTimeNow(YYYY_MM_DD);
  40. }
  41. public static String getTime() {
  42. return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
  43. }
  44. public static String dateTimeNow() {
  45. return dateTimeNow(YYYYMMDDHHMMSS);
  46. }
  47. public static String dateTimeNow(final String format) {
  48. return parseDateToStr(format, new Date());
  49. }
  50. public static String dateTime(final Date date) {
  51. return parseDateToStr(YYYY_MM_DD, date);
  52. }
  53. public static String parseDateToStr(final String format, final Date date) {
  54. return new SimpleDateFormat(format).format(date);
  55. }
  56. public static Date dateTime(final String format, final String ts) {
  57. try {
  58. return new SimpleDateFormat(format).parse(ts);
  59. } catch (ParseException e) {
  60. throw new RuntimeException(e);
  61. }
  62. }
  63. /**
  64. * 日期路径 即年/月/日 如2018/08/08
  65. */
  66. public static String datePath() {
  67. Date now = new Date();
  68. return DateFormatUtils.format(now, "yyyy/MM/dd");
  69. }
  70. /**
  71. * 日期路径 即年/月/日 如20180808
  72. */
  73. public static String dateTime() {
  74. Date now = new Date();
  75. return DateFormatUtils.format(now, "yyyyMMdd");
  76. }
  77. /**
  78. * 日期型字符串转化为日期 格式
  79. */
  80. public static Date parseDate(Object str) {
  81. if (str == null) {
  82. return null;
  83. }
  84. try {
  85. return parseDate(str.toString(), parsePatterns);
  86. } catch (ParseException e) {
  87. return null;
  88. }
  89. }
  90. /**
  91. * 获取服务器启动时间
  92. */
  93. public static Date getServerStartDate() {
  94. long time = ManagementFactory.getRuntimeMXBean().getStartTime();
  95. return new Date(time);
  96. }
  97. /**
  98. * 计算相差天数
  99. */
  100. public static int differentDaysByMillisecond(Date date1, Date date2) {
  101. return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
  102. }
  103. /**
  104. * 计算两个时间差
  105. */
  106. public static String getDatePoor(Date endDate, Date nowDate) {
  107. long nd = 1000 * 24 * 60 * 60;
  108. long nh = 1000 * 60 * 60;
  109. long nm = 1000 * 60;
  110. // long ns = 1000;
  111. // 获得两个时间的毫秒时间差异
  112. long diff = endDate.getTime() - nowDate.getTime();
  113. // 计算差多少天
  114. long day = diff / nd;
  115. // 计算差多少小时
  116. long hour = diff % nd / nh;
  117. // 计算差多少分钟
  118. long min = diff % nd % nh / nm;
  119. // 计算差多少秒//输出结果
  120. // long sec = diff % nd % nh % nm / ns;
  121. return day + "天" + hour + "小时" + min + "分钟";
  122. }
  123. /**
  124. * 增加 LocalDateTime ==> Date
  125. */
  126. public static Date toDate(LocalDateTime temporalAccessor) {
  127. ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
  128. return Date.from(zdt.toInstant());
  129. }
  130. /**
  131. * 增加 LocalDate ==> Date
  132. */
  133. public static Date toDate(LocalDate temporalAccessor) {
  134. LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
  135. ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
  136. return Date.from(zdt.toInstant());
  137. }
  138. /**
  139. * 获取两个日期间隔的日期
  140. *
  141. */
  142. public static List<String> getBetweenDate(String start, String end) {
  143. LocalDate startDate = LocalDate.parse(start, DatePatternUtil.NORM_DATE_FORMATTER);
  144. LocalDate endDate = LocalDate.parse(end, DatePatternUtil.NORM_DATE_FORMATTER);
  145. return getBetweenDate(startDate, endDate);
  146. }
  147. /**
  148. * 获取两个日期间隔的日期
  149. *
  150. */
  151. public static List<String> getBetweenDate(LocalDate startDate, LocalDate endDate) {
  152. List<String> result = new LinkedList<>();
  153. while (!startDate.isAfter(endDate)) {
  154. result.add(DatePatternUtil.NORM_DATE_FORMATTER.format(startDate));
  155. startDate = startDate.plusDays(1);
  156. }
  157. return result;
  158. }
  159. }