时间戳比较(在开始时间与结束时间之内)
时间戳比较(在开始时间与结束时间之内)
实现思路很简单,一般都用它来做登录判断,比如登录的时候检查该用户是否还在有效期范围内,如果不在开始时间与结束时间之内,那么就表明该用户已经过期;
这样的话,首先就可以想起三个参数,第一个需要获取当前系统时间,因为我们登录的时候需要根据当前时间来判断,该用户是否还在有效期之内,然后再用数据库中获取该用户的开始时间与结束时间,这两个字段需要在数据库中存在;
1.首先,我需要需要编写一个uti类,创建一个函数方法:
/** * 时间格式化转换 * @param time * @return */ public static long dateToTimestamp(String time) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date = simpleDateFormat.parse(time); long ts = date.getTime()/1000; return ts; } catch (ParseException e) { return 0; } } /** * 传入参数返回布尔类型,在此方法进行逻辑判断,如果当前时间(currenttime)在开始时间(startTime)与结束时间(endTime)之内就 * 就返回true,否则就返回false * @param currenttime * @param startTime * @param endTime * @return */ public static boolean isUserChick(String currenttime,String startTime,String endTime){ long c= DateUtil.dateToTimestamp(currenttime); long s=dateToTimestamp(startTime); long e= DateUtil.dateToTimestamp(endTime); if (s<c&&c<e){ return true; }else { return false; } }
2.在登录的拦截器中调用DateUtil中的isUserChick方法即可,需要传入三个参数,当前系统时间、开始时间、结束时间
/** *判断用户是否账号正常 *登录判断当前时间是否在开始时间和结束时间范围内,如果不在提示账号过期 */ //获取当前系统时间 Date date = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");//可以方便地修改日期格式 String currenttime = dateFormat.format(date); //获取用户开始时间 String startTime = user.getStartTime(); //获取用户结束时间 String endTime = user.getEndTime(); //判断账号是否过期 boolean flag=DateUtil.isUserChick(currenttime,startTime,endTime); if (flag==false){ throw new ExpiredCredentialsException(); }
因为我们登陆采用的是Shiro拦截器,所以,如果发现该用户不再范围之内,直接抛出异常给前端即可;
额外逻辑
该模块还需要一点就是,如果传过来的开始时间与结束时间为空,那么就证明该用户是永久,不再进入时间戳判断:
if (StringUtil.isNotEmpty(user.getStartTime())&&StringUtil.isNotEmpty(user.getEndTime())){
}
作者:罗昊
感谢各位阅读学习,
如果有疑问或纠错请在评论区留言与我交流,再次感谢各位读者的支持