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<br>
|
*
|
* @Description: 日期工具类<br>
|
* @Project: <br>
|
* @CreateDate: Created in 2020/2/3 15:40 <br>
|
* @Author: <a href="4345453@kidgrow.com">liuke</a>
|
*/
|
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<Map<String, DateFormat>> dateFormatThreadLocal = new ThreadLocal<Map<String, DateFormat>>();
|
private static DateFormat getDateFormat(String pattern) {
|
if (pattern==null || pattern.trim().length()==0) {
|
throw new IllegalArgumentException("pattern cannot be empty.");
|
}
|
|
Map<String, DateFormat> dateFormatMap = dateFormatThreadLocal.get();
|
if(dateFormatMap!=null && dateFormatMap.containsKey(pattern)){
|
return dateFormatMap.get(pattern);
|
}
|
|
synchronized (dateFormatThreadLocal) {
|
if (dateFormatMap == null) {
|
dateFormatMap = new HashMap<String, DateFormat>();
|
}
|
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();
|
}
|
}
|