java - 如何在JAVA中找到我当前的时间在今天的时间和明天的日期之间

标签 java date datetime time logical-operators

我正在尝试确定当前时间是否为19:30:00 是在 19:00:00 和第二天 03:00:00 之间,但我的代码失败了。 我的代码在这种情况下失败 我可以使用日期来表示露营时间吗?如果可以,请告诉我如何操作

import java.util.Calendar;
import java.text.SimpleDateFormat;

public class DateUtils {

    // format 24hre ex. 12:12 , 17:15
    private static String  HOUR_FORMAT = "HH:mm";

    private DateUtils() {    }

    public static String getCurrentHour() {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdfHour = new SimpleDateFormat(HOUR_FORMAT);
        String hour = sdfHour.format(cal.getTime());
        return hour;
    }

    /**
     * @param  target  hour to check
     * @param  start   interval start
     * @param  end     interval end
     * @return true    true if the given hour is between
     */
    public static boolean isHourInInterval(String target, String start, String end) {
        return ((target.compareTo(start) >= 0)
                && (target.compareTo(end) <= 0));
    }

    /**
     * @param  start   interval start
     * @param  end     interval end
     * @return true    true if the current hour is between
     */
    public static boolean isNowInInterval(String start, String end) {
        return DateUtils.isHourInInterval
            (DateUtils.getCurrentHour(), start, end);
    }

    //    TEST
    public static void main (String[] args) {
      String now = DateUtils.getCurrentHour();
      String start = "14:00";
      String end   = "14:26";
      System. out.println(now + " between " + start + "-" + end + "?");
      System. out.println(DateUtils.isHourInInterval(now,start,end));
      /*
       * output example :
       *   21:01 between 14:00-14:26?
       *   false
       *
       */
    }
}

最佳答案

java.time.LocalTime 是你的 friend 。下面是一个简单的例子,当然可以做得更短一些。

void test(){
    var tz = ZoneId.of("CET");
    var anyDate = LocalDate.of(2019,12,4);

    var x = ZonedDateTime.of(LocalDateTime.of(anyDate, LocalTime.of(18,59)),tz).toInstant();

    System.out.println(testTime(Clock.fixed( ZonedDateTime.of(LocalDateTime.of(anyDate, LocalTime.of(18,59)),tz).toInstant(),tz)));
    System.out.println(testTime(Clock.fixed( ZonedDateTime.of(LocalDateTime.of(anyDate, LocalTime.of(19,01)),tz).toInstant(),tz)));
    System.out.println(testTime(Clock.fixed( ZonedDateTime.of(LocalDateTime.of(anyDate, LocalTime.of(00,00)),tz).toInstant(),tz)));
    System.out.println(testTime(Clock.fixed( ZonedDateTime.of(LocalDateTime.of(anyDate, LocalTime.of(02,59)),tz).toInstant(),tz)));
    System.out.println(testTime(Clock.fixed( ZonedDateTime.of(LocalDateTime.of(anyDate, LocalTime.of(03,01)),tz).toInstant(),tz)));
}

boolean testTime(Clock clock){
    var evening =LocalTime.of(19,00);
    var midnight =LocalTime.of(00,00);
    var night =LocalTime.of(03,00);

    LocalTime wallTime = LocalTime.now(clock);

    return (wallTime.isAfter(evening) && wallTime.isBefore(midnight.minusNanos(1))) ||  (midnight.isBefore(wallTime) && wallTime.isBefore(night)) || wallTime.equals(midnight);

}

关于java - 如何在JAVA中找到我当前的时间在今天的时间和明天的日期之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59174490/

相关文章:

javascript - 将所有日期/日期时间元素转换为本地时区

java - 用于检查 session 存在的过滤器

提交时 JavaScript 日期验证

Java 8 流从 List 中的 Map 读取值

java - 日历返回错误时间

date - Hive:从当前日期减去 1 年

mysql - 毫秒精度的时间戳: How to save them in MySQL

c# - 该字段必须是数字

java - jparepository 的复杂查询。三张表连接

java - 矩阵格式的控制台输出