JavaSQL配置文件查询条件匹配字段是Date时注意事项

来源:互联网 发布:淘宝客服安抚顾客语 编辑:程序博客网 时间:2024/05/22 13:16

今天在调试一个功能时出现一个问题,有一个调Dao返回泛型List的简单代码,传入两个查询参数,分别为String和Date类型。

在生产环境传入时间等参数查询时总是查不到数据,实际上表中是有数据的,将语句加上查询条件捞出来放到数据库是能查出来数据的。

后来才发现是因为代码中传的date类型参数只精确到秒,毫秒级别不是零导致查询匹配不上,所以在用date类型进行比较时一定要记得毫秒位,或者就用时间戳格式进行比较,或者限制一个精确到毫秒的范围,比如date>=2017-08-04 00:00:00:000 and date<=2017-08-04 23:59:59:999。

测试代码如下:

可以发现,毫秒未置零之前根据当前时间获取的calendar实例和字符串转换出的date对象时间戳是不同的。

public static void main(String[] args)    {        //当前时间的Calendar实例        Calendar calendar=Calendar.getInstance();        Date date=new Date();        //将小时置零        calendar.set(Calendar.HOUR_OF_DAY, 0);        //将分钟置零        calendar.set(Calendar.MINUTE,0);        //将秒置零        calendar.set(Calendar.SECOND, 0);        //获取转化为毫秒值        System.out.println(calendar.getTimeInMillis());//1502121600093        //转化为date类型        date=calendar.getTime();        //打印date值的时间戳值        System.out.println(date.getTime());//1502121600093        //格式化        SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        System.out.println(sdf1.format(date));//2017-08-08 00:00:00        System.out.println();        String str="2017-08-08 00:00:00";        try        {            //将字符串转化为时间,字符串时间格式一定要和SimpleDateFormat构造的对象格式相同,否则会报错            date=sdf1.parse(str);            System.out.println(date.getTime());//1502121600000        }        catch (ParseException e)        {            // TODO Auto-generated catch block            e.printStackTrace();        }        calendar.set(Calendar.MILLISECOND,0);        System.out.println(calendar.getTimeInMillis());//1502121600000            }


阅读全文
0 0
原创粉丝点击