可以先获取当前时间的日期,然后获取当天的0时对应的timestamp对象和第二天0时对应的timestamp对象,然后用时间字段between A and B就可以查出当天的订单数量。
获取数据库timestamp对象一般是通过timestamp的构造函数,传入毫秒数来构造timestamp对象。
因此我们需要获得所需时间所对应的毫秒数。
方法1
可以利用Calendar的静态方法getInstance来获取当前时间,返回一个Calendar对象。
通过Calendar.get(Calendar.YEAR)来获取Calendar对象的年,把里面的参数换成静态属性月,日等可以获得Calendar对象的月,日等。
这样获得了年月日,通过java.util.Date的构造函数传入年月日就可以得到对应日期,默认时间为0时的对象。(需要注意传入的年需要减1900)
然后通过getTime方法获取当前Date对象所对应的毫秒数,用该毫秒数作为timestamp的构造函数的参数创建timestamp对象。
至此就获得了今天时间对应的上限和下限。
/**
* @return获取当天日期的开始和结束
*/
public Timestamp[] getDateStartAndEnd(){
Calendar calendar=Calendar.getInstance();
int year=calendar.get(Calendar.YEAR);
int month=calendar.get(Calendar.MONTH);
int date=calendar.get(Calendar.DATE);
Date start1=new Date(year-1900,month,date);
Date end1=new Date(year-1900,month,date+1);
Timestamp start2=new Timestamp(start1.getTime());
Timestamp end2=new Timestamp(end1.getTime());
Timestamp[] arr=new Timestamp[2];
arr[0]=start2;
arr[1]=end2;
return arr;
}
不过Date的传年月日构造方法已经标记了即将移除,官方提醒使用Calendar方法。因此推荐使用第二种
方法2(推荐使用)
可以通过直接用Calendar对象来获取毫秒数,直接用set设置Calendar对象的时间为0,然后获取毫秒数创建timestamp对象。之后再获取日期,设置日期加一,再获取毫秒数创建timestamp对象。
/**
* @return获取当天日期的开始和结束
*/
public Timestamp[] getDateStartAndEnd(){
Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.HOUR,0);
calendar.set(Calendar.MINUTE,0);
calendar.set(Calendar.SECOND,0);
calendar.set(Calendar.MILLISECOND,0);
Timestamp start=new Timestamp(calendar.getTimeInMillis());
calendar.set(Calendar.DATE,calendar.get(Calendar.DATE)+1);
Timestamp end=new Timestamp(calendar.getTimeInMillis());
Timestamp[] arr=new Timestamp[2];
arr[0]=start;
arr[1]=end;
return arr;
}
提醒:
timestamp的valueOf方法对字符串的匹配,要求比较高,不能省略时间。
而java.util.Date可以省略时间,只用日期就可以构造一个Date对象。