我有以下场景:我有一个登记入住应用程序,如果用户在第 1 天早上 8 点到晚上 8 点之间没有登记入住,那么在上午 8 点(包括在内)之后,用户可以再次登记入住。
例如:
LastCheckin -> JAN 28th 08:01AM Today -> JAN 29th 07:50AM 以上无法登记
LastCheckin -> JAN 28th 00:50AM Today -> JAN 28th 09:10PM 可以在上面签到
LastCheckin -> JAN 28th 07:50AM Today -> JAN 28th 09:50AM 可以在上面签到
LastCheckin -> JAN 28th 05:50PM Today -> JAN 28th 06:50AM 以上无法签到
我的验证功能:
private Boolean validateLastCheckIn(LocalDateTime lastCheckinDate){
LocalTime checkinTime = LocalTime.MIDNIGHT.plusHours(8);
LocalDate today = LocalDate.now();
LocalDateTime todayCheckinTime = LocalDateTime.of(today, checkinTime);
//if trying to checkIn before limit, but on the same day (eg. after 12am)
if(lastCheckinDate.getDayOfYear() == todayCheckinTime.getDayOfYear()){
return lastCheckinDate.isAfter(todayCheckinTime);
}else{
//if its some other day in the past check
LocalDate yesterdayCheckIn = LocalDate.now().minusDays(1);
LocalDateTime yesterdayCheckinTime = LocalDateTime.of(yesterdayCheckIn, checkinTime);
return lastCheckinDate.isBefore(yesterdayCheckinTime);
}
}
Run Code Online (Sandbox Code Playgroud)
我有两个问题,有没有比做这个比较更好的选择?这样做是否有任何我可能遗漏的差距或缺陷?
谢谢!
要求可以这样简化:最后一次入住日期时间需要是昨天早上 8 点之后的 24 小时。
所以方法可以这样写
private Boolean validateLastCheckIn(LocalDateTime lastCheckinDate){
LocalTime checkinTime = LocalTime.MIDNIGHT.plusHours(8);
LocalDate yesterday = LocalDate.now().minusDays(1);
LocalDateTime yesterdayAt8AM = LocalDateTime.of(yesterday, checkinTime);
// between(start, end)
return ChronoUnit.MINUTES.between(yesterdayAt8AM, lastCheckinDate) > 24*60;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |