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

3 篇文章 0 订阅

今天在调试一个功能时出现一个问题,有一个调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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值