gpt4 book ai didi

java - 如何检查当前时间是否在 Android future 的时间间隔内?

转载 作者:搜寻专家 更新时间:2023-11-01 07:46:44 25 4
gpt4 key购买 nike

我正在处理以下问题。在我的用例中,用户在首次启动应用程序时设置 2 个日期,即 StartSleepingHours 和 StopSleepingHours。

例如,它们可能看起来像 StartSleepingHours:Thu 2 Mar 20:00 2017StopSleepingHours:Thu 2 Mar 8:00 2017(注意它们在同一位置日期,因为这是用户设置的日期)。现在,我的问题是我有一个周期性任务,每 15 分钟运行一次,以检查 Now 是否在间隔 StartSH 和 StopSH 之间,以确定是否启动 Activity 监视服务。

显然,我不希望我的服务在 sleep 时监视用户的 Activity 。目前,我正在尝试仅从 StartSH 和 StopSH 中提取小时和分钟信息,并从中创建日期对象以便将它们与现在进行比较,但我对如何检查现在是否在间隔 Start/内感到非常困惑和沮丧以后停止SH。

目前我的代码是这样的:

public static boolean isWithinSH(Date startSH, Date now, Date stopSH) {
boolean isSH = false;

Calendar calendar = Calendar.getInstance(Locale.UK);
calendar.set(Calendar.HOUR_OF_DAY, startSH.getHours());
calendar.set(Calendar.MINUTE, startSH.getMinutes());

Date sameDayStartSH = calendar.getTime();

calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
Date midnight = calendar.getTime();

calendar.add(Calendar.DAY_OF_WEEK, 1);
calendar.set(Calendar.HOUR_OF_DAY, stopSH.getHours());
calendar.set(Calendar.MINUTE, stopSH.getMinutes());

Date currentStopSH = calendar.getTime();


if (now.before(midnight) && now.after(sameDayStartSH)) {
System.out.println("SLEEPING HOURS");
isSH = true;
} else if (now.after(midnight) && now.before(currentStopSH)) {
System.out.println("SLEEPING HOURS");
isSH = true;
} else {
System.out.println("NOT SLEEPING HOURS");
}
return isSH;
}

我正在尝试在 Java 环境中测试该方法:

public static void main(String[] args) {


Calendar calendar = Calendar.getInstance(Locale.UK);
calendar.add(Calendar.DAY_OF_WEEK, -1);
calendar.set(Calendar.HOUR_OF_DAY, 20);
calendar.set(Calendar.MINUTE, 0);

Date StartSH = calendar.getTime();
calendar.add(Calendar.DAY_OF_WEEK, 2);
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 45);

Date StopSH = calendar.getTime();

Date now = new Date(); // 9:42

if (isWithingSH(StartSH, now, StopSH)) {
System.out.println("SPEEPING HOURS");
} else {
System.out.println("NOT SPEEPING HOURS");
}

}

控制台显示 NOT SLEEPING HOURS 但我认为它应该显示 SLEEPING HOURS 因为现在是 9:30 之前

最佳答案

如果我理解正确的话,你只关心小时/分钟,所以你可以只检查当前小时是否在用户提供的范围内,在这种情况下检查分钟是否在分钟范围内

 public static boolean isWithingSH(Date startSH, Date now, Date stopSH) {
try {
SimpleDateFormat parser = new SimpleDateFormat("HH:mm", Locale.UK);
Date startTime = parser.parse(startSH.getHours() + ":" + startSH.getMinutes());
Date endTime = parser.parse(stopSH.getHours() + ":" + stopSH.getMinutes());
Date nowTime = parser.parse(now.getHours() + ":" + now.getMinutes());

if(startTime.after(endTime)) {
if(endTime.after(nowTime)) {
return true;
} else {
return false;
}
} else {
if (startTime.before(nowTime) && endTime.after(nowTime)){
return true;
} else {
return false;
}
}
} catch (java.text.ParseException e) {
return false;
}
}

但我会丢失 Date(您正在使用的方法已弃用)并使用 jodatime 库代替此 question希望能更清楚地说明使用 yodatime 或任何其他第 3 方库的优缺点

关于java - 如何检查当前时间是否在 Android future 的时间间隔内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42574433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com