写在前面
封装了常用时间的相互转换,以及常用时间的常见格式化
工具类实现
package tonels.util;
import com.alibaba.excel.util.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class DateUtils {
// ======以下为常用时间转换===================
public static Date asDate(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
public static Date asDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
public static LocalDate asLocalDate(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
}
public static LocalDateTime asLocalDateTime(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
// =======以上为常用时间转换=====================
// ==============以下为常用时间和String的转换=====================
public static final String DATE_FORMAT_10 = "yyyy-MM-dd";
public static final String DATE_FORMAT_14 = "yyyyMMddHHmmss";
public static final String DATE_FORMAT_17 = "yyyyMMdd HH:mm:ss";
public static final String DATE_FORMAT_19 = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_FORMAT_19_FORWARD_SLASH = "yyyy/MM/dd HH:mm:ss";
private static final String MINUS = "-";
private DateUtils() {
}
/** * convert string to date * * @param dateString * @param dateFormat * @return * @throws ParseException */
public static Date parseDate(String dateString, String dateFormat) throws ParseException {
if (StringUtils.isEmpty(dateFormat)) {
dateFormat = switchDateFormat(dateString);
}
return new SimpleDateFormat(dateFormat).parse(dateString);
}
/** * convert string to date * * @param dateString * @return * @throws ParseException */
public static Date parseDate(String dateString) throws ParseException {
return parseDate(dateString, switchDateFormat(dateString));
}
/** * switch date format * * @param dateString * @return */
private static String switchDateFormat(String dateString) {
int length = dateString.length();
switch (length) {
case 19:
if (dateString.contains(MINUS)) {
return DATE_FORMAT_19;
} else {
return DATE_FORMAT_19_FORWARD_SLASH;
}
case 17:
return DATE_FORMAT_17;
case 14:
return DATE_FORMAT_14;
case 10:
return DATE_FORMAT_10;
default:
throw new IllegalArgumentException("can not find date format for:" + dateString);
}
}
/** * Format date * <p> * yyyy-MM-dd HH:mm:ss * * @param date * @return */
public static String format(Date date) {
return format(date, null);
}
/** * Format date * * @param date * @param dateFormat * @return */
public static String format(Date date, String dateFormat) {
if (date == null) {
return "";
}
if (StringUtils.isEmpty(dateFormat)) {
dateFormat = DATE_FORMAT_19;
}
return new SimpleDateFormat(dateFormat).format(date);
}
// 这里是 Java8中时间和String的转化
public static String format(LocalDate localDate, String dateFormat) {
Date date = asDate(localDate);
if (date == null) {
return "";
}
if (StringUtils.isEmpty(dateFormat)) {
dateFormat = DATE_FORMAT_19;
}
return new SimpleDateFormat(dateFormat).format(date);
}
public static String format(LocalDateTime localDateTime, String dateFormat) {
Date date = asDate(localDateTime);
if (date == null) {
return "";
}
if (StringUtils.isEmpty(dateFormat)) {
dateFormat = DATE_FORMAT_19;
}
return new SimpleDateFormat(dateFormat).format(date);
}
// String 转 LocalDate/LocalDateTime
public static LocalDate parseLocalDate(String dateString) throws ParseException {
Date date = parseDate(dateString, switchDateFormat(dateString));
return asLocalDate(date);
}
public static LocalDateTime parseLocalDateTime(String dateString) throws ParseException {
Date date = parseDate(dateString, switchDateFormat(dateString));
return asLocalDateTime(date);
}
}