1.平常在做统计筛选的时候避免不了时间段查询(只精确到天)。刚开始直接采用between and查询发现时间后面的一天出不来(比如2022-2-18 2022-2-20)2-20号的数据就没有。后来看sql发现因为数据库的是时间格式是yyyy-MM-dd HH:mm:ss格式的导致后面默认补上00:00:00 所以就需要对前端传入的参数做改变。直接上代码。
2. 先创建工具类
import java.text.DateFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
* TODO: 类描述
*
* @author zhang
* @date 2022/2/13 15:55
*/
public class DateUtil {
public static ThreadLocal<DateFormat> chinaDateSDF = new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
return df;
}
};
/**
* 获取日期yyyy-MM-dd格式字符串
*
* @param date
* @param locale
* @return
*/
public static String dateToStr(Date date, Locale locale) {
if (locale == null) {
return null;
}
return chinaDateSDF.get().format(date);
}
/**
* 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
*
* @param strDate
* @return
*/
public static Date strToDateLong(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
}
4.调用
Date start = DateUtil.strToDateLong(DateUtil.dateToStr(caseInfo.getStartTime(), Locale.CHINA) + " 00:00:00");
Date end = DateUtil.strToDateLong(DateUtil.dateToStr(caseInfo.getEndTime(), Locale.CHINA) + " 23:59:59");
在时间后面拼上23:59:59就可以查询条件后的时间了。
5.分享结束。