DateUtil.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package com.qmth.exam.reserve.util;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Calendar;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.Map;
  8. import org.apache.commons.lang3.StringUtils;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import com.qmth.boot.core.exception.StatusException;
  12. public class DateUtil {
  13. private static final Logger log = LoggerFactory.getLogger(DateUtil.class);
  14. public final static String LongDateString = "yyyy-MM-dd HH:mm:ss";
  15. public final static String LongZHDateString = "yyyy年MM月dd日 HH:mm:ss";
  16. public final static String ShortDateString = "yyyy-MM-dd";
  17. public final static String ShortDateStringWithoutSplit = "yyyyMMdd";
  18. public final static String ShortTimeString = "HH:mm:ss";
  19. public final static String ShortTimeStringWithoutSplit = "HHmmss";
  20. public final static String LongDateStringWithoutSplit = "yyyyMMddHHmmss";
  21. public final static String MillisecondDateString = "yyyyMMddHHmmssSSS";
  22. public final static String HourMinuteString = "HH:mm";
  23. private static Map<String, ThreadLocal<SimpleDateFormat>> SimpleDateForamtThreadLocalMap = new HashMap<String, ThreadLocal<SimpleDateFormat>>();
  24. static {
  25. // 初始化常见的日期类型
  26. synchronized (DateUtil.class) {
  27. SimpleDateForamtThreadLocalMap.put(ShortDateString, InitThreadLocal(ShortDateString));
  28. SimpleDateForamtThreadLocalMap.put(ShortDateStringWithoutSplit,
  29. InitThreadLocal(ShortDateStringWithoutSplit));
  30. SimpleDateForamtThreadLocalMap.put(LongDateString, InitThreadLocal(LongDateString));
  31. SimpleDateForamtThreadLocalMap.put(LongDateStringWithoutSplit, InitThreadLocal(LongDateStringWithoutSplit));
  32. SimpleDateForamtThreadLocalMap.put(MillisecondDateString, InitThreadLocal(MillisecondDateString));
  33. SimpleDateForamtThreadLocalMap.put(ShortTimeString, InitThreadLocal(ShortTimeString));
  34. SimpleDateForamtThreadLocalMap.put(ShortTimeStringWithoutSplit,
  35. InitThreadLocal(ShortTimeStringWithoutSplit));
  36. }
  37. }
  38. public static String getLongDateByLongTime(Long time) {
  39. SimpleDateFormat simpleDateFormat = new SimpleDateFormat(LongDateString);
  40. Date date = new Date(time);
  41. return simpleDateFormat.format(date);
  42. }
  43. public static String getShortDateByLongTime(Long time) {
  44. SimpleDateFormat simpleDateFormat = new SimpleDateFormat(ShortDateString);
  45. Date date = new Date(time);
  46. return simpleDateFormat.format(date);
  47. }
  48. public static String getShortDateWithoutSplitByLongTime(Long time) {
  49. SimpleDateFormat simpleDateFormat = new SimpleDateFormat(ShortDateStringWithoutSplit);
  50. Date date = new Date(time);
  51. return simpleDateFormat.format(date);
  52. }
  53. public static Long getLongTimeByDate(String dateStr) {
  54. SimpleDateFormat sdf = new SimpleDateFormat(LongDateString);
  55. try {
  56. Date date = sdf.parse(dateStr);
  57. Long timestamp = date.getTime();
  58. return timestamp;
  59. } catch (ParseException e) {
  60. log.error(e.getMessage());
  61. throw new StatusException("日期转换失败!");
  62. }
  63. }
  64. public static Long getLongTimeByZHDate(String dateStr) {
  65. SimpleDateFormat sdf = new SimpleDateFormat(LongZHDateString);
  66. try {
  67. Date date = sdf.parse(dateStr);
  68. Long timestamp = date.getTime();
  69. return timestamp;
  70. } catch (ParseException e) {
  71. log.error(e.getMessage());
  72. throw new StatusException("日期转换失败!");
  73. }
  74. }
  75. public static void main(String[] args) {
  76. String result = formatShortDateString(new Date());
  77. System.out.println(result);
  78. }
  79. public static Date addValues(int filed, int value) {
  80. return addValues(new Date(), filed, value);
  81. }
  82. public static Date addValues(Date date, int filed, int value) {
  83. Calendar c = Calendar.getInstance();
  84. c.setTime(date);
  85. c.add(filed, value);
  86. return c.getTime();
  87. }
  88. public static String format(Date date, String pattern) {
  89. SimpleDateFormat sdf = getFormatter(pattern);
  90. try {
  91. return sdf.format(date);
  92. } catch (Exception e) {
  93. }
  94. return null;
  95. }
  96. public static String formatShortString(Date date, String pattern) {
  97. try {
  98. return getFormatter(pattern).format(date);
  99. } catch (Exception e) {
  100. return null;
  101. }
  102. }
  103. public static String formatShortDateString(Date date) {
  104. return formatShortString(date, ShortDateStringWithoutSplit);
  105. }
  106. public static Date parse(String source, String pattern) {
  107. if (StringUtils.isEmpty(pattern))
  108. pattern = LongDateString;
  109. if (StringUtils.isEmpty(source))
  110. return null;
  111. SimpleDateFormat sdf = getFormatter(pattern);
  112. try {
  113. return sdf.parse(source);
  114. } catch (Exception e) {
  115. }
  116. return null;
  117. }
  118. public static SimpleDateFormat getFormatter(final String pattern) {
  119. ThreadLocal<SimpleDateFormat> tl = SimpleDateForamtThreadLocalMap.get(pattern);
  120. if (tl == null) {
  121. synchronized (DateUtil.class) {
  122. if (tl == null) {
  123. tl = SimpleDateForamtThreadLocalMap.get(pattern);
  124. if (tl == null)
  125. SimpleDateForamtThreadLocalMap.put(pattern, InitThreadLocal(pattern));
  126. }
  127. }
  128. tl = SimpleDateForamtThreadLocalMap.get(pattern);
  129. }
  130. return tl.get();
  131. }
  132. public static boolean isBetwwen(Date start, Date end) {
  133. return isBetwwen(new Date(), start, end);
  134. }
  135. public static boolean isBetwwen(Date now, Date start, Date end) {
  136. if (now.after(start) && now.before(end))
  137. return true;
  138. else
  139. return false;
  140. }
  141. public static ThreadLocal<SimpleDateFormat> InitThreadLocal(final String pattern) {
  142. ThreadLocal<SimpleDateFormat> sdf = new ThreadLocal<SimpleDateFormat>() {
  143. @Override
  144. protected SimpleDateFormat initialValue() {
  145. return new SimpleDateFormat(pattern);
  146. }
  147. };
  148. return sdf;
  149. }
  150. /**
  151. * 获取某天的起点时间
  152. *
  153. * @param date 某个日期
  154. * @param changeDays 日期前后调整几天
  155. * @return 示例:2024-01-01 00:00:00
  156. */
  157. public static Date changeDateAndTimeBegin(Date date, int changeDays) {
  158. Calendar calendar = Calendar.getInstance();
  159. calendar.setTime(date);
  160. calendar.add(Calendar.DATE, -changeDays);
  161. calendar.set(Calendar.HOUR_OF_DAY, 0);
  162. calendar.set(Calendar.MINUTE, 0);
  163. calendar.set(Calendar.SECOND, 0);
  164. calendar.set(Calendar.MILLISECOND, 0);
  165. return calendar.getTime();
  166. }
  167. /**
  168. * 获取某天的终点时间
  169. *
  170. * @param date 某个日期
  171. * @param changeDays 日期前后调整几天
  172. * @return 示例:2024-01-01 23:59:59
  173. */
  174. public static Date changeDateAndTimeEnd(Date date, int changeDays) {
  175. Calendar calendar = Calendar.getInstance();
  176. calendar.setTime(date);
  177. calendar.add(Calendar.DATE, -changeDays);
  178. calendar.set(Calendar.HOUR_OF_DAY, 23);
  179. calendar.set(Calendar.MINUTE, 59);
  180. calendar.set(Calendar.SECOND, 59);
  181. calendar.set(Calendar.MILLISECOND, 999);
  182. return calendar.getTime();
  183. }
  184. }