DateUtils.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package com.fdkankan.openApi.util;
  2. import cn.hutool.core.date.DateUnit;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.apache.commons.lang3.time.DateFormatUtils;
  5. import java.lang.management.ManagementFactory;
  6. import java.text.ParseException;
  7. import java.text.SimpleDateFormat;
  8. import java.time.*;
  9. import java.util.Date;
  10. import java.util.TimeZone;
  11. /**
  12. * 时间工具类
  13. *
  14. * @author fdkk
  15. */
  16. @Slf4j
  17. public class DateUtils extends org.apache.commons.lang3.time.DateUtils
  18. {
  19. public static String YYYY = "yyyy";
  20. public static String YYYY_MM = "yyyy-MM";
  21. public static String YYYY_MM_DD = "yyyy-MM-dd";
  22. public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
  23. public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
  24. private static String[] parsePatterns = {
  25. "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
  26. "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
  27. "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
  28. /**
  29. * 获取当前Date型日期
  30. *
  31. * @return Date() 当前日期
  32. */
  33. public static Date getNowDate()
  34. {
  35. return new Date();
  36. }
  37. /**
  38. * 把时间戳转成北京时间的字符串表示
  39. *
  40. * @param input
  41. * @return
  42. */
  43. public static String convert2CST(long input) {
  44. SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  45. dff.setTimeZone(TimeZone.getTimeZone("GMT+08"));
  46. try {
  47. return dff.format(new Date(input));
  48. } catch (Exception e) {
  49. log.error("convert2CST meet exception.", e);
  50. }
  51. return "";
  52. }
  53. /**
  54. * 获取当前日期, 默认格式为yyyy-MM-dd
  55. *
  56. * @return String
  57. */
  58. public static String getDate()
  59. {
  60. return dateTimeNow(YYYY_MM_DD);
  61. }
  62. public static final String getTime()
  63. {
  64. return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
  65. }
  66. public static final String dateTimeNow()
  67. {
  68. return dateTimeNow(YYYYMMDDHHMMSS);
  69. }
  70. public static final String dateTimeNow(final String format)
  71. {
  72. return parseDateToStr(format, new Date());
  73. }
  74. public static final String dateTime(final Date date)
  75. {
  76. return parseDateToStr(YYYY_MM_DD, date);
  77. }
  78. public static final String parseDateToStr(final String format, final Date date)
  79. {
  80. return new SimpleDateFormat(format).format(date);
  81. }
  82. public static final Date dateTime(final String format, final String ts)
  83. {
  84. try
  85. {
  86. return new SimpleDateFormat(format).parse(ts);
  87. }
  88. catch (ParseException e)
  89. {
  90. throw new RuntimeException(e);
  91. }
  92. }
  93. /**
  94. * 日期路径 即年/月/日 如2018/08/08
  95. */
  96. public static final String datePath()
  97. {
  98. Date now = new Date();
  99. return DateFormatUtils.format(now, "yyyy/MM/dd");
  100. }
  101. /**
  102. * 日期路径 即年/月/日 如20180808
  103. */
  104. public static final String dateTime()
  105. {
  106. Date now = new Date();
  107. return DateFormatUtils.format(now, "yyyyMMdd");
  108. }
  109. /**
  110. * 日期型字符串转化为日期 格式
  111. */
  112. public static Date parseDate(Object str)
  113. {
  114. if (str == null)
  115. {
  116. return null;
  117. }
  118. try
  119. {
  120. return parseDate(str.toString(), parsePatterns);
  121. }
  122. catch (ParseException e)
  123. {
  124. return null;
  125. }
  126. }
  127. /**
  128. * 获取服务器启动时间
  129. */
  130. public static Date getServerStartDate()
  131. {
  132. long time = ManagementFactory.getRuntimeMXBean().getStartTime();
  133. return new Date(time);
  134. }
  135. /**
  136. * 计算两个时间差
  137. */
  138. public static String getDatePoor(Date endDate, Date nowDate)
  139. {
  140. long nd = 1000 * 24 * 60 * 60;
  141. long nh = 1000 * 60 * 60;
  142. long nm = 1000 * 60;
  143. // long ns = 1000;
  144. // 获得两个时间的毫秒时间差异
  145. long diff = endDate.getTime() - nowDate.getTime();
  146. // 计算差多少天
  147. long day = diff / nd;
  148. // 计算差多少小时
  149. long hour = diff % nd / nh;
  150. // 计算差多少分钟
  151. long min = diff % nd % nh / nm;
  152. // 计算差多少秒//输出结果
  153. // long sec = diff % nd % nh % nm / ns;
  154. return day + "天" + hour + "小时" + min + "分钟";
  155. }
  156. /**
  157. * 增加 LocalDateTime ==> Date
  158. */
  159. public static Date toDate(LocalDateTime temporalAccessor)
  160. {
  161. ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
  162. return Date.from(zdt.toInstant());
  163. }
  164. /**
  165. * 增加 LocalDate ==> Date
  166. */
  167. public static Date toDate(LocalDate temporalAccessor)
  168. {
  169. LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
  170. ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
  171. return Date.from(zdt.toInstant());
  172. }
  173. public static long getDatePoorUnit(Date endDate, Date nowDate, DateUnit unit) {
  174. // 获得两个时间的毫秒时间差异
  175. long diff = endDate.getTime() - nowDate.getTime();
  176. return diff / unit.getMillis();
  177. }
  178. }