TimeProcessing.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. package com.ydtech.modules.order.utils;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import java.time.*;
  6. import java.time.format.DateTimeFormatter;
  7. /**
  8. * @description: 保司 处理时间 工具类
  9. * @author: wenks
  10. * @date: 2025/3/5 10:30
  11. **/
  12. public final class TimeProcessing {
  13. private TimeProcessing() {
  14. throw new IllegalStateException("Utility class");
  15. }
  16. public static final DateTimeFormatter DATE_TIME_FORMATTER;
  17. static {
  18. DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  19. }
  20. public static final DateTimeFormatter DATE_FORMATTER;
  21. static {
  22. DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  23. }
  24. public static final long ONE = 1L;
  25. public static LocalDateTime parseDateTime(String date) {
  26. return LocalDateTime.parse(date, DATE_TIME_FORMATTER);
  27. }
  28. public static LocalDate parseDate(String date) {
  29. return LocalDate.parse(date, DATE_FORMATTER);
  30. }
  31. /**
  32. * 时间格式转换
  33. * yyyy-MM-dd 转 yyyy-MM-dd HH:mm:ss
  34. *
  35. * @param date yyyy-MM-dd
  36. * @return yyyy-MM-dd HH:mm:ss
  37. */
  38. public static String dateToDateTime(String date) {
  39. return LocalDateTime.of(LocalDate.parse(date, DATE_FORMATTER), LocalTime.MIN).format(DATE_TIME_FORMATTER);
  40. }
  41. public static String dateToDateTimeMax(String date) {
  42. return LocalDateTime.of(LocalDate.parse(date, DATE_FORMATTER), LocalTime.MAX).format(DATE_TIME_FORMATTER);
  43. }
  44. public static String dateTimeToDate(String dateTime) {
  45. return LocalDateTime.parse(dateTime, DATE_TIME_FORMATTER).format(DATE_FORMATTER);
  46. }
  47. /**
  48. * 一年以后减1秒得时间 (适用于零点时)
  49. *
  50. * @param date 开始时间
  51. * @return 结束时间
  52. */
  53. public static String minusOneSecondAfterYear(String date) {
  54. return plusOneYear(date).minusSeconds(ONE).format(DATE_TIME_FORMATTER);
  55. }
  56. /**
  57. * 一年以后减1天得时间 (适用于不是零点时)
  58. *
  59. * @param date 开始时间
  60. * @return 结束时间
  61. */
  62. public static String minusOneDayAfterYear(String date) {
  63. return plusOneYear(date).minusDays(ONE).minusSeconds(ONE).format(DATE_TIME_FORMATTER);
  64. }
  65. /**
  66. * 一年以后得时间
  67. *
  68. * @param date 开始时间
  69. * @return 结束时间
  70. */
  71. public static LocalDateTime plusOneYear(String date) {
  72. return parseDateTime(date).plusYears(ONE);
  73. }
  74. /**
  75. * 一年以后得时间
  76. *
  77. * @param date 开始时间
  78. * @return 结束时间
  79. */
  80. public static String plusOneYearToString(String date) {
  81. return plusOneYear(date).format(DATE_TIME_FORMATTER);
  82. }
  83. /**
  84. * 几天之前
  85. *
  86. * @param date 时间
  87. * @param days 天数
  88. * @return
  89. */
  90. public static String minusDays(String date, long days) {
  91. LocalDate parse = LocalDate.parse(date);
  92. return parse.minusDays(days).format(DATE_FORMATTER);
  93. }
  94. /**
  95. * 几天后
  96. *
  97. * @param date 时间
  98. * @param days 天数
  99. * @return
  100. */
  101. public static String plusDays(String date, long days) {
  102. LocalDate parse = LocalDate.parse(date);
  103. return parse.plusDays(days).format(DATE_FORMATTER);
  104. }
  105. /**
  106. * 今天的日期
  107. *
  108. * @return
  109. */
  110. public static String nowDate() {
  111. return LocalDate.now().format(DATE_FORMATTER);
  112. }
  113. public static String nowDateTime() {
  114. return LocalDateTime.now().format(DATE_TIME_FORMATTER);
  115. }
  116. /**
  117. * 明天的 整点日期
  118. * @param time
  119. * @return
  120. */
  121. public static String tomorrowDateTime(String time) {
  122. // 解析传入的时间字符串
  123. LocalDateTime localDateTime = LocalDateTime.parse(time, DATE_TIME_FORMATTER);
  124. // 加1天,并设置为 00:00:00
  125. return localDateTime.plusDays(1)
  126. .toLocalDate()
  127. .atStartOfDay()
  128. .format(DATE_TIME_FORMATTER);
  129. }
  130. /**
  131. * 明天的 明天0点0分0秒
  132. *
  133. * @return 明天0点0分0秒
  134. */
  135. public static String tomorrowDateTime() {
  136. return LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIN).format(DATE_TIME_FORMATTER);
  137. }
  138. public static String tomorrowDate() {
  139. return LocalDate.now().plusDays(1).format(DATE_FORMATTER);
  140. }
  141. /**
  142. * 获取时间范围
  143. * 用于查询订单的时候按照时间范围查询
  144. *
  145. * @param date 时间
  146. * @param isDateTime 是否要返回时间类型
  147. * @return 时间范围
  148. */
  149. public static TimeFrame getTimeFrame(String date, boolean isDateTime) {
  150. LocalDate dateTime;
  151. if (date.length() > 10) {
  152. dateTime = LocalDate.parse(date, DATE_TIME_FORMATTER);
  153. } else {
  154. dateTime = LocalDate.parse(date, DATE_FORMATTER);
  155. }
  156. LocalDate localDate = dateTime.plusDays(ONE);
  157. if (isDateTime) {
  158. LocalDateTime startOfDay = LocalDateTime.of(dateTime, LocalTime.MIDNIGHT);
  159. LocalDateTime endOfDay = LocalDateTime.of(localDate, LocalTime.MIDNIGHT);
  160. return new TimeFrame(startOfDay.format(DATE_TIME_FORMATTER), endOfDay.format(DATE_TIME_FORMATTER));
  161. }
  162. return new TimeFrame(dateTime.format(DATE_FORMATTER), localDate.format(DATE_FORMATTER));
  163. }
  164. /**
  165. * 获取年份范围
  166. *
  167. * @return 当前年的开始和结束日期
  168. */
  169. public static TimeFrame getYearRange() {
  170. int year = LocalDate.now().getYear();
  171. LocalDate firstDay = LocalDate.of(year, 1, 1);
  172. LocalDate lastDay = LocalDate.of(year, 12, 31);
  173. return new TimeFrame(firstDay.format(DATE_FORMATTER), lastDay.format(DATE_FORMATTER));
  174. }
  175. /**
  176. * 获取现在的时间
  177. *
  178. * @return 现在时间
  179. */
  180. public static String getNowDateTime() {
  181. return LocalDateTime.now().format(DATE_TIME_FORMATTER);
  182. }
  183. /**
  184. * 使用年限计算
  185. *
  186. * @param date 日期
  187. * @return 年限
  188. */
  189. public static int serviceLife(String date) {
  190. LocalDate localDate = parseDate(date);
  191. LocalDate now = LocalDate.now();
  192. Period between = Period.between(localDate, now);
  193. return between.getYears();
  194. }
  195. /**
  196. * 获取去年的年份
  197. * @return 去年的 年
  198. */
  199. public static int getLastYear(){
  200. return LocalDate.now().minusYears(1).getYear();
  201. }
  202. @Data
  203. @AllArgsConstructor
  204. @NoArgsConstructor
  205. public static class TimeFrame {
  206. /**
  207. * 开始时间
  208. */
  209. private String startTime;
  210. /**
  211. * 结束时间
  212. */
  213. private String endTime;
  214. }
  215. }