工具类
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class DateTimeUtil {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("+8"));
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneId.of("+8"));
public static LocalDateTime strTime2LocalDateTime(String dateTime) {
if (dateTime == null) {
return null;
}
return LocalDateTime.parse(dateTime, DATE_TIME_FORMATTER);
}
public static LocalDate strDate2LocalDate(String date) {
if (date == null) {
return null;
}
return LocalDate.parse(date, DATE_FORMATTER);
}
public static String localDateTime2String(LocalDateTime localDateTime) {
if (localDateTime == null) {
return null;
}
return DATE_TIME_FORMATTER.format(localDateTime);
}
public static java.sql.Date localDate2SqlDate(LocalDate date) {
if (date == null) {
return null;
}
Date tmp = localDate2Date(date);
java.sql.Date sqlDate = new java.sql.Date(tmp.getTime());
return sqlDate;
}
public static java.sql.Date localDateTime2SqlDate(LocalDateTime localDateTime) {
if (localDateTime == null) {
return null;
}
final Date tmp = localDateTime2Date(localDateTime);
java.sql.Date sqlDate = new java.sql.Date(tmp.getTime());
return sqlDate;
}
public static LocalDateTime date2LocalDateTime(Date date) {
if (date == null) {
return null;
}
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zone);
}
public static LocalDateTime sqlDate2LocalDateTime(java.sql.Date sqlDate) {
if (sqlDate == null) {
return null;
}
Date date = new Date(sqlDate.getTime());
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zone);
}
public static LocalDate date2LocalDate(Date date) {
if (date == null) {
return null;
}
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
return localDateTime.toLocalDate();
}
public static LocalDate sqlDate2LocalDate(java.sql.Date sqlDate) {
if (sqlDate == null) {
return null;
}
Date date = new Date(sqlDate.getTime());
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
return localDateTime.toLocalDate();
}
public static LocalTime date2LocalTime(Date date) {
if (date == null) {
return null;
}
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
return localDateTime.toLocalTime();
}
public static Date localDateTime2Date(LocalDateTime localDateTime) {
if (localDateTime == null) {
return null;
}
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
return Date.from(instant);
}
public static Date localDate2Date(LocalDate localDate) {
if (localDate == null) {
return null;
}
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
return Date.from(instant);
}
public static Date localTime2Date(LocalDate localDate, LocalTime localTime) {
if (localTime == null) {
return null;
}
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
return Date.from(instant);
}
public static Date parse(String source) {
if (source == null || source.length() == 0) {
return null;
}
source = source.trim();
if (source.matches("^\\d{4}-\\d{1,2}$")) {
return parseDate(source, "yyyy-MM");
} else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {
return parseDate(source, "yyyy-MM-dd");
} else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {
return parseDate(source, "yyyy-MM-dd HH:mm");
} else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {
return parseDate(source, "yyyy-MM-dd HH:mm:ss");
} else {
throw new IllegalArgumentException("Invalid false value '" + source + "'");
}
}
private static Date parseDate(String dateStr, String format) {
if (dateStr == null || format == null || dateStr.length() == 0 || format.length() == 0) {
return null;
}
Date date;
try {
SimpleDateFormat sdf = new SimpleDateFormat(format);
date = sdf.parse(dateStr);
} catch (Exception e) {
throw new IllegalArgumentException(e.getLocalizedMessage());
}
return date;
}
}
测试代码
public static void main(String[] args) {
System.out.println(parse("2000-12"));
System.out.println(parse("2000-12-12"));
System.out.println(parse("2000-12-12 12:12"));
System.out.println(parse("2000-12-12 12:12:12"));
final Date utilDate = new Date();
System.out.println(date2LocalDate(utilDate));
final java.sql.Date sqlDate = new java.sql.Date(24131241324L);
System.out.println(sqlDate2LocalDate(sqlDate));
final java.sql.Date sqlDate = new java.sql.Date(3243144143L);
System.out.println(sqlDate2LocalDateTime(sqlDate));
java.sql.Date sqlDate = new java.sql.Date(34124132L);
System.out.println(sqlDate);
java.util.Date utilDate = new java.util.Date();
System.out.println(utilDate);
子类赋值给父类
utilDate = sqlDate;
System.out.println(utilDate);
sqlDate = (java.sql.Date) utilDate;
System.out.println(sqlDate);
sqlDate = new java.sql.Date(utilDate.getTime());
System.out.println(sqlDate);
}