package com.freedom.demo.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
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;
/**
* @author tobebetter9527
* @description 处理日期工具,适用于java.util.Date
* @create 2020/05/02 16:32
*/
@Slf4j
public class DateUtil {
private DateUtil() {
}
private static final String DATE_FORMAT = "yyyy-MM-dd";
private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
private static final ThreadLocal<Map<String, DateFormat>> dateThreadLocal = new ThreadLocal<>();
/**
* format Date, yyyy-MM-dd
*
* @param date
* @return
*/
public static String formatDate(Date date) {
return format(date, DATE_FORMAT);
}
/**
* format Date, yyyy-MM-dd HH:mm:ss
*
* @param date
* @return
*/
public static String formateDateTime(Date date) {
return format(date, DATETIME_FORMAT);
}
/**
* format date
*
* @param date
* @param pattern
* @return
*/
public static String format(Date date, String pattern) {
return getDateFormat(pattern).format(date);
}
/**
* parse date,yyyy-MM-dd
*
* @param dateStr
* @return
*/
public static Date parseDate(String dateStr) {
return parse(dateStr, DATE_FORMAT);
}
/**
* parse Date, yyyy-MM-dd HH:mm:ss
*
* @param dateStr
* @return
*/
public static Date parseDateTime(String dateStr) {
return parse(dateStr, DATETIME_FORMAT);
}
/**
* parse date
*
* @param dateStr
* @param pattern
* @return
*/
public static Date parse(String dateStr, String pattern) {
try {
return getDateFormat(pattern).parse(dateStr);
} catch (ParseException e) {
log.error("parse date error dateStr={}, pattern={}", dateStr, pattern, e);
}
return null;
}
public static Date addYears(Date date, int amount) {
return add(date, Calendar.YEAR, amount);
}
public static Date addMonths(Date date, int amount) {
return add(date, Calendar.MONTH, amount);
}
public static Date addDays(Date date, int amount) {
return add(date, Calendar.DAY_OF_MONTH, amount);
}
public static Date addHours(Date date, int amount) {
return add(date, Calendar.HOUR_OF_DAY, amount);
}
public static Date addMinutes(Date date, int amount) {
return add(date, Calendar.MINUTE, amount);
}
private static Date add(Date date, int calendarField, int amount) {
if (date == null) {
return null;
}
Calendar instance = Calendar.getInstance();
instance.setTime(date);
instance.add(calendarField, amount);
return instance.getTime();
}
/**
* 同个线程,可以避免创建很多个DateFormat.
*
* @param pattern
* @return
*/
private static DateFormat getDateFormat(String pattern) {
// 校验入参
if (StringUtils.isBlank(pattern)) {
throw new IllegalArgumentException("pattern can't be empty");
}
// 获取DateFormat
Map<String, DateFormat> dateFormatMap = dateThreadLocal.get();
if (dateFormatMap != null && dateFormatMap.containsKey(pattern)) {
return dateFormatMap.get(pattern);
}
synchronized (dateThreadLocal) {
if (dateFormatMap == null) {
dateFormatMap = new HashMap<>();
}
dateFormatMap.put(pattern, new SimpleDateFormat(pattern));
dateThreadLocal.set(dateFormatMap);
}
return dateFormatMap.get(pattern);
}
}
处理java.util.Date日期的格式工具
最新推荐文章于 2024-01-23 07:00:00 发布