123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- package com.qmth.exam.reserve.util;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import com.qmth.boot.core.exception.StatusException;
- public class DateUtil {
- private static final Logger log = LoggerFactory.getLogger(DateUtil.class);
- public final static String LongDateString = "yyyy-MM-dd HH:mm:ss";
- public final static String LongZHDateString = "yyyy年MM月dd日 HH:mm:ss";
- public final static String ShortDateString = "yyyy-MM-dd";
- public final static String ShortDateStringWithoutSplit = "yyyyMMdd";
- public final static String ShortTimeString = "HH:mm:ss";
- public final static String ShortTimeStringWithoutSplit = "HHmmss";
- public final static String LongDateStringWithoutSplit = "yyyyMMddHHmmss";
- public final static String MillisecondDateString = "yyyyMMddHHmmssSSS";
- public final static String HourMinuteString = "HH:mm";
- private static Map<String, ThreadLocal<SimpleDateFormat>> SimpleDateForamtThreadLocalMap = new HashMap<String, ThreadLocal<SimpleDateFormat>>();
- static {
- // 初始化常见的日期类型
- synchronized (DateUtil.class) {
- SimpleDateForamtThreadLocalMap.put(ShortDateString, InitThreadLocal(ShortDateString));
- SimpleDateForamtThreadLocalMap.put(ShortDateStringWithoutSplit,
- InitThreadLocal(ShortDateStringWithoutSplit));
- SimpleDateForamtThreadLocalMap.put(LongDateString, InitThreadLocal(LongDateString));
- SimpleDateForamtThreadLocalMap.put(LongDateStringWithoutSplit, InitThreadLocal(LongDateStringWithoutSplit));
- SimpleDateForamtThreadLocalMap.put(MillisecondDateString, InitThreadLocal(MillisecondDateString));
- SimpleDateForamtThreadLocalMap.put(ShortTimeString, InitThreadLocal(ShortTimeString));
- SimpleDateForamtThreadLocalMap.put(ShortTimeStringWithoutSplit,
- InitThreadLocal(ShortTimeStringWithoutSplit));
- }
- }
- public static String getLongDateByLongTime(Long time) {
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat(LongDateString);
- Date date = new Date(time);
- return simpleDateFormat.format(date);
- }
- public static String getShortDateByLongTime(Long time) {
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat(ShortDateString);
- Date date = new Date(time);
- return simpleDateFormat.format(date);
- }
- public static String getShortDateWithoutSplitByLongTime(Long time) {
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat(ShortDateStringWithoutSplit);
- Date date = new Date(time);
- return simpleDateFormat.format(date);
- }
- public static Long getLongTimeByDate(String dateStr) {
- SimpleDateFormat sdf = new SimpleDateFormat(LongDateString);
- try {
- Date date = sdf.parse(dateStr);
- Long timestamp = date.getTime();
- return timestamp;
- } catch (ParseException e) {
- log.error(e.getMessage());
- throw new StatusException("日期转换失败!");
- }
- }
- public static Long getLongTimeByZHDate(String dateStr) {
- SimpleDateFormat sdf = new SimpleDateFormat(LongZHDateString);
- try {
- Date date = sdf.parse(dateStr);
- Long timestamp = date.getTime();
- return timestamp;
- } catch (ParseException e) {
- log.error(e.getMessage());
- throw new StatusException("日期转换失败!");
- }
- }
- public static void main(String[] args) {
- String result = formatShortDateString(new Date());
- System.out.println(result);
- }
- public static Date addValues(int filed, int value) {
- return addValues(new Date(), filed, value);
- }
- public static Date addValues(Date date, int filed, int value) {
- Calendar c = Calendar.getInstance();
- c.setTime(date);
- c.add(filed, value);
- return c.getTime();
- }
- public static String format(Date date, String pattern) {
- SimpleDateFormat sdf = getFormatter(pattern);
- try {
- return sdf.format(date);
- } catch (Exception e) {
- }
- return null;
- }
- public static String formatShortString(Date date, String pattern) {
- try {
- return getFormatter(pattern).format(date);
- } catch (Exception e) {
- return null;
- }
- }
- public static String formatShortDateString(Date date) {
- return formatShortString(date, ShortDateStringWithoutSplit);
- }
- public static Date parse(String source, String pattern) {
- if (StringUtils.isEmpty(pattern))
- pattern = LongDateString;
- if (StringUtils.isEmpty(source))
- return null;
- SimpleDateFormat sdf = getFormatter(pattern);
- try {
- return sdf.parse(source);
- } catch (Exception e) {
- }
- return null;
- }
- public static SimpleDateFormat getFormatter(final String pattern) {
- ThreadLocal<SimpleDateFormat> tl = SimpleDateForamtThreadLocalMap.get(pattern);
- if (tl == null) {
- synchronized (DateUtil.class) {
- if (tl == null) {
- tl = SimpleDateForamtThreadLocalMap.get(pattern);
- if (tl == null)
- SimpleDateForamtThreadLocalMap.put(pattern, InitThreadLocal(pattern));
- }
- }
- tl = SimpleDateForamtThreadLocalMap.get(pattern);
- }
- return tl.get();
- }
- public static boolean isBetwwen(Date start, Date end) {
- return isBetwwen(new Date(), start, end);
- }
- public static boolean isBetwwen(Date now, Date start, Date end) {
- if (now.after(start) && now.before(end))
- return true;
- else
- return false;
- }
- public static ThreadLocal<SimpleDateFormat> InitThreadLocal(final String pattern) {
- ThreadLocal<SimpleDateFormat> sdf = new ThreadLocal<SimpleDateFormat>() {
- @Override
- protected SimpleDateFormat initialValue() {
- return new SimpleDateFormat(pattern);
- }
- };
- return sdf;
- }
- /**
- * 获取某天的起点时间
- *
- * @param date 某个日期
- * @param changeDays 日期前后调整几天
- * @return 示例:2024-01-01 00:00:00
- */
- public static Date changeDateAndTimeBegin(Date date, int changeDays) {
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(date);
- calendar.add(Calendar.DATE, -changeDays);
- calendar.set(Calendar.HOUR_OF_DAY, 0);
- calendar.set(Calendar.MINUTE, 0);
- calendar.set(Calendar.SECOND, 0);
- calendar.set(Calendar.MILLISECOND, 0);
- return calendar.getTime();
- }
- /**
- * 获取某天的终点时间
- *
- * @param date 某个日期
- * @param changeDays 日期前后调整几天
- * @return 示例:2024-01-01 23:59:59
- */
- public static Date changeDateAndTimeEnd(Date date, int changeDays) {
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(date);
- calendar.add(Calendar.DATE, -changeDays);
- calendar.set(Calendar.HOUR_OF_DAY, 23);
- calendar.set(Calendar.MINUTE, 59);
- calendar.set(Calendar.SECOND, 59);
- calendar.set(Calendar.MILLISECOND, 999);
- return calendar.getTime();
- }
- }
|