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.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author tobebetter9527
* @description 处理日期工具,适用于java8新的日期和时间
* @create 2020/05/02 16:32
*/
@Slf4j
public class DateUtil2 {
private DateUtil2() {
}
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, DateTimeFormatter>> dateThreadLocal = new ThreadLocal<>();
/**
* format LocalDate, yyyy-MM-dd
*
* @param localDateTime
* @return
*/
public static String formatDate(LocalDateTime localDateTime) {
return format(localDateTime, DATE_FORMAT);
}
/**
* format LocalDate, yyyy-MM-dd
*
* @param localDate
* @return
*/
public static String formatDate(LocalDate localDate) {
return format(localDate, DATE_FORMAT);
}
/**
* format formatDateTime, yyyy-MM-dd HH:mm:ss
*
* @param localDateTime
* @return
*/
public static String formatDateTime(LocalDateTime localDateTime) {
return format(localDateTime, DATETIME_FORMAT);
}
/**
* format date
*
* @param localDateTime
* @param pattern
* @return
*/
public static String format(LocalDateTime localDateTime, String pattern) {
if (localDateTime == null) {
throw new IllegalArgumentException("date can't be null");
}
return localDateTime.format(getDateFormat(pattern));
}
/**
* format date
*
* @param localDate
* @param pattern
* @return
*/
public static String format(LocalDate localDate, String pattern) {
if (localDate == null) {
throw new IllegalArgumentException("date can't be null");
}
return localDate.format(getDateFormat(pattern));
}
/**
* parse date,yyyy-MM-dd
*
* @param dateStr
* @return
*/
public static LocalDate parseDate(String dateStr) {
return parseDate(dateStr, DATE_FORMAT);
}
/**
* parse Date, yyyy-MM-dd HH:mm:ss
*
* @param dateStr
* @return
*/
public static LocalDateTime parseDateTime(String dateStr) {
return parseDateTime(dateStr, DATETIME_FORMAT);
}
/**
* parse date
*
* @param dateStr
* @param pattern
* @return
*/
public static LocalDateTime parseDateTime(String dateStr, String pattern) {
return LocalDateTime.parse(dateStr, getDateFormat(pattern));
}
/**
* parse date
*
* @param dateStr
* @param pattern
* @return
*/
public static LocalDate parseDate(String dateStr, String pattern) {
return LocalDate.parse(dateStr, getDateFormat(pattern));
}
/**
* 同个线程,可以避免创建很多个DateFormat.
*
* @param pattern
* @return
*/
private static DateTimeFormatter getDateFormat(String pattern) {
// 校验入参
if (StringUtils.isBlank(pattern)) {
throw new IllegalArgumentException("pattern can't be empty");
}
// 获取DateFormat
Map<String, DateTimeFormatter> dateFormatMap = dateThreadLocal.get();
if (dateFormatMap != null && dateFormatMap.containsKey(pattern)) {
return dateFormatMap.get(pattern);
}
synchronized (dateThreadLocal) {
if (dateFormatMap == null) {
dateFormatMap = new HashMap<>();
}
dateFormatMap.put(pattern, DateTimeFormatter.ofPattern(pattern));
dateThreadLocal.set(dateFormatMap);
}
return dateFormatMap.get(pattern);
}
}
Java8日期格式化工具
最新推荐文章于 2024-08-16 15:39:17 发布