早上 8 点后使用 Java8 时间签到

Leo*_*rdo -2 java date java-8

我有以下场景:我有一个登记入住应用程序,如果用户在第 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)

我有两个问题,有没有比做这个比较更好的选择?这样做是否有任何我可能遗漏的差距或缺陷?

谢谢!

Sha*_*her 5

要求可以这样简化:最后一次入住日期时间需要是昨天早上 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)