DateUtils.java 5.1 KB

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