如果直接用LocalDateTime.parse将日期字符串(yyyy-MM-dd)转成LocalDateTime会导致报错,所以我这里提供了将日期字符串转成LocalDateTime的方法,仅供参考。如有更好方式,欢迎大家分享。
import org.apache.commons.lang3.StringUtils;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
/**
* @author sjp
* @Description:
* @Date Create in 21:36 2020/8/24
*/
public class MyTest {
public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String NULL_VALUE = "NULL";
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static LocalDateTime parserString2LocalDateTime(final String dateTime) {
if (StringUtils.isBlank(dateTime) || NULL_VALUE.equalsIgnoreCase(dateTime)) {
return null;
}
if(dateTime.length() == 10){
return convertDate2LocalDateTime(convertLocalDate2Date(parserString2LocalDate(dateTime)));
}
return LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern(DATE_TIME_FORMAT));
}
public static Date convertLocalDate2Date(LocalDate localDate) {
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
return Date.from(instant);
}
public static LocalDate parserString2LocalDate(final String date) {
if (StringUtils.isBlank(date) || NULL_VALUE.equalsIgnoreCase(date)) {
return null;
}
return LocalDate.parse(date, DateTimeFormatter.ofPattern(DATE_FORMAT));
}
public static LocalDateTime convertDate2LocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
return localDateTime;
}
public static void main(String[] args) {
System.out.println(parserString2LocalDateTime("2020-08-01 21:51:30"));
}
}