DateUtil
package com.tongwx.demo.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.ThreadLocalRandom;
public class DateUtil {
private static ThreadLocal<SimpleDateFormat> sdf = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
private static ThreadLocal<Calendar> calendarInstance = ThreadLocal.withInitial(Calendar::getInstance);
public static String format(Date date) {
String format = sdf.get().format(date);
// TODO 需要remove吗(https://www.jb51.net/program/284662ext.htm)
//sdf.remove();
return format;
}
public static Date parse(String dateStr) throws ParseException {
Date parse = sdf.get().parse(dateStr);
// TODO 需要remove吗(https://www.jb51.net/program/284662ext.htm)
//sdf.remove();
return parse;
}
public static Date discardMilliseconds(Date date) {
Calendar calendar = calendarInstance.get();
calendar.setTime(date);
calendar.set(Calendar.MILLISECOND, 0);
Date time = calendar.getTime();
// TODO 需要remove吗(https://www.jb51.net/program/284662ext.htm)
//calendarInstance.remove();
return time;
}
public static Date getRandomDateWithinADay() {
return new Date(new Date().getTime() + ThreadLocalRandom.current().nextInt(3600 * 24 * 1000));
}
/**
* 测试线程安全
* @param args
*/
public static void main(String[] args) {
for (int i = 0; i < 1000; i++) {
new Thread(() -> {
Date randomDate = DateUtil.getRandomDateWithinADay();
String randomDateString = DateUtil.format(randomDate);
Date discardDate = DateUtil.discardMilliseconds(randomDate);
String discardDateString = DateUtil.format(discardDate);
if( ! randomDateString.equals(discardDateString)){
System.out.println(randomDateString);
System.out.println(discardDateString);
}
}).start();
}
}
}