如何计算一天休息两次之间的时间?

时间:2020-02-20 13:16:22

标签: java android

我有一个“请勿打扰”系统,如果当前时间在“请勿打扰范围时间”中,则会使我的Android应用程序的声音静音。 如果我只是在一天之间使用范围时间,则效果很好,但是我不知道如何在一天休息的情况下编写时间,例如在第二天的11:00 pm至第二天的1:00。

这是我用来检测免打扰时间的方法:

private boolean isInDNDTime() {
    Calendar now = Calendar.getInstance();
    Calendar startTime = Calendar.getInstance();
    Calendar endTime = Calendar.getInstance();
    MyDate myDate = new MyDate(new Date());

    if (isDNDTwoDays()) {
        startTime.setTime(myDate.getYesterday().toDate());
        startTime.set(Calendar.HOUR_OF_DAY, getDNDStartHourTime());
        startTime.set(Calendar.MINUTE, getDNDStartMinuteTime());

        endTime.setTime(myDate.getTomorrow().toDate());
        endTime.set(Calendar.HOUR_OF_DAY, getDNDEndHourTime());
        endTime.set(Calendar.MINUTE, getDNDEndMinuteTime());

    } else {
        startTime.set(Calendar.HOUR_OF_DAY, getDNDStartHourTime());
        startTime.set(Calendar.MINUTE, getDNDStartMinuteTime());

        endTime.set(Calendar.HOUR_OF_DAY, getDNDEndHourTime());
        endTime.set(Calendar.MINUTE, getDNDEndMinuteTime());
    }

    return now.after(startTime) && now.before(endTime);
}

2 个答案:

答案 0 :(得分:0)

请尝试以下代码

 private boolean isInDNDTime() {
        Calendar now = Calendar.getInstance();
        Calendar startTime = Calendar.getInstance();
        Calendar endTime = Calendar.getInstance();
        MyDate myDate = new MyDate(new Date());

        if (isDNDTwoDays()) {
            startTime.add(Calendar.DATE, 1);
            endTime.add(Calendar.DATE, 1);

           // startTime.setTime(myDate.getYesterday().toDate());
            startTime.set(Calendar.HOUR_OF_DAY, getDNDStartHourTime());
            startTime.set(Calendar.MINUTE, getDNDStartMinuteTime());

           // endTime.setTime(myDate.getTomorrow().toDate());
            endTime.set(Calendar.HOUR_OF_DAY, getDNDEndHourTime());
            endTime.set(Calendar.MINUTE, getDNDEndMinuteTime());

        } else {
            startTime.set(Calendar.HOUR_OF_DAY, getDNDStartHourTime());
            startTime.set(Calendar.MINUTE, getDNDStartMinuteTime());

            endTime.set(Calendar.HOUR_OF_DAY, getDNDEndHourTime());
            endTime.set(Calendar.MINUTE, getDNDEndMinuteTime());
        }

        return now.after(startTime) && now.before(endTime);
    }

答案 1 :(得分:0)

有一个现代的API用于执行此类任务,它称为java.time,可从Java 8中获得。以下示例说明了如何使用几行代码来做到这一点:

public static void main(String[] args) {
    // create sample data
    LocalDateTime start = LocalDateTime.of(2020, 2, 19, 12, 30);
    LocalDateTime timeInDND = LocalDateTime.now();
    LocalDateTime end = LocalDateTime.of(2020, 2, 21, 12, 30);

    // just check if the time is equal to start or end or is between them
    if (timeInDND.equals(start) || timeInDND.equals(end)
            || (timeInDND.isAfter(start) && timeInDND.isBefore(end))) {
        System.out.println(timeInDND.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) 
                + " is in the DND period");
    } else {
        System.err.println(timeInDND.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) 
                + " is not in the DND period");
    }
}

不幸的是,您对低于26的Android API级别的支持需要外部库ThreeTen Android Backport,因为java.time在API级别26中可用。您可以查看有关以下问题的其他信息how to use the ThreeTenABP

相关问题