时间戳比较(在开始时间与结束时间之内)

时间戳比较(在开始时间与结束时间之内)

实现思路很简单,一般都用它来做登录判断,比如登录的时候检查该用户是否还在有效期范围内,如果不在开始时间与结束时间之内,那么就表明该用户已经过期;

这样的话,首先就可以想起三个参数,第一个需要获取当前系统时间,因为我们登录的时候需要根据当前时间来判断,该用户是否还在有效期之内,然后再用数据库中获取该用户的开始时间与结束时间,这两个字段需要在数据库中存在;

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())){


}
posted @ 2019-06-14 10:03  StanleyBlogs  阅读(6871)  评论(0编辑  收藏  举报