package com.kidgrow.common.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
* * @Description: 日期工具类
* @Project:
* @CreateDate: Created in 2020/2/3 15:40
* @Author: liuke */ public class DateUtil { // ---------------------- format parse ---------------------- private static Logger logger = LoggerFactory.getLogger(DateUtil.class); private static final String DATE_FORMAT = "yyyy-MM-dd"; private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String DATETIME_FORMAT_YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; private static ThreadLocal> dateFormatThreadLocal = new ThreadLocal>(); private static DateFormat getDateFormat(String pattern) { if (pattern==null || pattern.trim().length()==0) { throw new IllegalArgumentException("pattern cannot be empty."); } Map dateFormatMap = dateFormatThreadLocal.get(); if(dateFormatMap!=null && dateFormatMap.containsKey(pattern)){ return dateFormatMap.get(pattern); } synchronized (dateFormatThreadLocal) { if (dateFormatMap == null) { dateFormatMap = new HashMap(); } dateFormatMap.put(pattern, new SimpleDateFormat(pattern)); dateFormatThreadLocal.set(dateFormatMap); } return dateFormatMap.get(pattern); } /** * format datetime. like "yyyy-MM-dd" * * @param date * @return * @throws ParseException */ public static String formatDate(Date date) { return format(date, DATE_FORMAT); } /** * format date. like "yyyy-MM-dd HH:mm:ss" * * @param date * @return * @throws ParseException */ public static String formatDateTime(Date date) { return format(date, DATETIME_FORMAT); } /** * format date * * @param date * @param patten * @return * @throws ParseException */ public static String format(Date date, String patten) { return getDateFormat(patten).format(date); } /** * parse date string, like "yyyy-MM-dd HH:mm:s" * * @param dateString * @return * @throws ParseException */ public static Date parseDate(String dateString){ return parse(dateString, DATE_FORMAT); } /** * parse datetime string, like "yyyy-MM-dd HH:mm:ss" * * @param dateString * @return * @throws ParseException */ public static Date parseDateTime(String dateString) { return parse(dateString, DATETIME_FORMAT); } /** * parse date * * @param dateString * @param pattern * @return * @throws ParseException */ public static Date parse(String dateString, String pattern) { try { Date date = getDateFormat(pattern).parse(dateString); return date; } catch (Exception e) { logger.warn("parse date error, dateString = {}, pattern={}; errorMsg = ", dateString, pattern, e.getMessage()); return null; } } // ---------------------- add date ---------------------- public static Date addDays(final Date date, final int amount) { return add(date, Calendar.DAY_OF_MONTH, amount); } public static Date addYears(final Date date, final int amount) { return add(date, Calendar.YEAR, amount); } public static Date addMonths(final Date date, final int amount) { return add(date, Calendar.MONTH, amount); } public static Date addMinute(final Date date, final int amount) { return add(date, Calendar.MINUTE, amount); } private static Date add(final Date date, final int calendarField, final int amount) { if (date == null) { return null; } final Calendar c = Calendar.getInstance(); c.setTime(date); c.add(calendarField, amount); return c.getTime(); } }