在多线程的情况下使用SimpleDateFormat,会有线程安全的问题:导致获取到的时间不对。下面用线程安全的DateTimeFormatter类实现:
public class DateUtil {
private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private static final DateTimeFormatter dateTimeFormatterSecond = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
/**
* 将时间戳转换为时间字符串
*/
public static String stampToDate(long lt){
try {
return dateTimeFormatter.format(LocalDateTime.ofInstant(
Instant.ofEpochMilli(lt), ZoneId.systemDefault()));
} catch (Exception e) {
log.error("将时间戳转换为时间,异常:",e);
}
return "";
}
/**
* 将时间转换为时间戳
*/
public static long dateToStamp(String s) {
Date date = new Date();
if (StringUtils.isBlank(s)) {
return date.getTime();
}
s += " 00:00:00";
try {
LocalDateTime parse = LocalDateTime.parse(s, dateTimeFormatterSecond);
return LocalDateTime.from(parse).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
} catch (Exception e) {
log.error("将时间转换为时间戳,异常:",e);
}
return date.getTime();
}
}