時間戳比較(在開始時間與結束時間之內)
實現思路很簡單,一般都用它來做登錄判斷,比如登錄的時候檢查該用戶是否還在有效期范圍內,如果不在開始時間與結束時間之內,那么就表明該用戶已經過期;
這樣的話,首先就可以想起三個參數,第一個需要獲取當前系統時間,因為我們登錄的時候需要根據當前時間來判斷,該用戶是否還在有效期之內,然后再用數據庫中獲取該用戶的開始時間與結束時間,這兩個字段需要在數據庫中存在;
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())){
}