之前在设计一些查询语句的时候,总是会纠结,到底开始时间是设置成00:00:00还是00:00:01,不确定前者是否是合法的时间设置。于是:


public static void main(String[] args) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse("2021-09-30 00:00:00");
System.out.println("date.getTime() = " + date.getTime());
}
//date.getTime() = 1632931200000

  所以这个00的表示是没问题的,那么最大和最小值就应该是00:00:00与23:59:59。

  但这里有一个要注意的问题,如果是时间闭环的话,不能将查找的时间设置为[00:00:00, 23:59:59]。这种设计会造成23:59:59之后1秒内的数据在查找区间之外,所以正确的设置方法应该是[00:00:00 第二天的00:00:00),startTime为大于等于,而endTime那里条件是小于,这才是真正的时间闭环。

 

  补充
上述说法不完全准确,这其实和设置date_time字段时精度设置有关系,如果长度为0,那么精度就到秒,此时上述的23:59:59就没有问题。
但如果长度一旦设置大于0,那么秒的默认条件就会把后续的长度带上。假设长度设置为6,此时搜索条件就会变为23:59:59.000000[长度与设置相同],那么数据如23:59:59.000123就不被包含在搜索范围内。
但是从个人习惯,以及需要花费额外的精力去检查这个长度的角度来看,还是用[第一天0,第N+1天0)的搜索条件更优。

 

 

 

posted on 2021-09-30 13:33  长江同学  阅读(577)  评论(0)    收藏  举报