gpt4 book ai didi

java - 检测当前时间是否在两个设置时间之间

转载 作者:行者123 更新时间:2023-11-29 05:44:51 24 4
gpt4 key购买 nike

我有一个包含服务的程序。该程序具有允许用户设置、禁用和启用时间的设置。在这两次之间(当然,如果启用了选项),程序应该无法运行。

我实际上很难做到这一点。我已经成功地以毫秒为单位转换了“禁用”和“启用”时间。我有以下代码,但它没有按预期工作。我想检测当前时间是否在两个设置时间之间,所以我可以在那个时候禁用服务。

public boolean isCurrentTimeBetween_enableDisable() {       
long sysTime = System.currentTimeMillis();

if((sysTime > disableTime && sysTime < enableTime)) {
return true;
}
return false;
}

谁能给我更好的提示?

更新:

如果用户选择让我们说

  • 禁用时间:15:00
  • 启用时间:22:00

然后代码按预期工作。

但是如果用户选择让我们说:

  • 禁用时间:22:00
  • 启用时间:06:00

那么很明显,Enable hour 是 NEXT day。所以我写了下面的代码:

if(todaysDisableDate(context).getTime() > enableAt.getTime()) {
enableCal.add(Calendar.DAY_OF_MONTH, 1);
enableAt = formatEnableDate.parse(enableCal.get(Calendar.DAY_OF_MONTH) + "-" +(enableCal.get(Calendar.MONTH)+1) + "-" + enableCal.get(Calendar.YEAR) + " " + endHours_string + ":" + endMinutes_string);
}

下面的代码正在获取实际日期。

public Date todaysDisableDate(Context context) {
Calendar disableCal = Calendar.getInstance();

getTimeValues_preferences((ContextWrapper) context, true, false); // this only gets a string for hour and minute (which is set up in preferences )

Date disableAt = null;

try {
disableAt = formatDisableDate.parse(disableCal.get(Calendar.DAY_OF_MONTH)+"-"+(disableCal.get(Calendar.MONTH)+1)+"-"+disableCal.get(Calendar.YEAR)+" "+startHours_string+":"+startMinutes_string); // današnji datum z današnjo uro
} catch (ParseException e) {
e.printStackTrace();
}
return disableAt;
}

public Date todaysEnableDate(Context context) {
Calendar enableCal = Calendar.getInstance();

getTimeValues_preferences((ContextWrapper) context, false, true);

Date enableAt = null;
try {
enableAt = formatEnableDate.parse(enableCal.get(Calendar.DAY_OF_MONTH)+"-"+(enableCal.get(Calendar.MONTH)+1)+"-"+enableCal.get(Calendar.YEAR)+" "+endHours_string+":"+endMinutes_string); // današnji datum z današnjo uro

if(todaysDisableDate(context).getTime() > enableAt.getTime()) {
enableCal.add(Calendar.DAY_OF_MONTH, 1);
enableAt = formatEnableDate.parse(enableCal.get(Calendar.DAY_OF_MONTH)+"-"+(enableCal.get(Calendar.MONTH)+1)+"-"+enableCal.get(Calendar.YEAR)+" "+endHours_string+":"+endMinutes_string);
}
} catch (ParseException e) {
}
return enableAt;
}

如果服务在 00:00 之前启动,代码工作正常。但是如果服务在(第二天)午夜之后开始,那么我从方法 isCurrentTimeBetween_enableDisable() 中得到错误,因为方法 todaysDisableDate(Context context) todaysEnableDate(Context context) 将在第二天退出(系统时间在同一天)

最佳答案

必须比较代码中的日期吗?如果这是项目要求,那么您可以忽略以下内容。

否则,我认为您可以使用 AlarmManager 创建功能,而无需实际比较日期。您可以为 AlarmManager 创建一个“启用” Intent 和一个“禁用” Intent 以在预定时间触发。像这样:

当用户确认时间表时注册您的闹钟。

Intent intent = new Intent(context, yourAlarmReceiver.class);  //or implicit with action
PendingIntent pIntent = PendingIntent.getBroadcast(
context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating (typeConstant, triggerAtMillis, intervalMillis, pIntent);

你只需要弄清楚triggerAtMillis是什么来确定那个广播的第一个镜头,而intervalMillis将是一整天,这是中的一个常量code>AlarmManager 类。

设置您的自定义接收器类(我写为 yourAlarmReceiver),它应该扩展 BroadcastReceiver,并在您的服务中注册接收器。在onReceive() 中,您应该根据intent.getAction() 执行相应的操作。如果您想要更多自定义,请不要忘记使用 Intent 过滤器注册您的接收器。

@Override
public void onReceive(Context context, Intent intent) {
switch(intent.getAction()){
case "enable": //enable if not enabled
case "disable": //disable if not disabled
default: break;
}
}

通过这种方式,您可以节省一些时间来比较今天和明天。您可以通过获取当前系统时间(可能采用 24 小时格式)来确定第一次拍摄的时间,并确定您的预期时间是否已经过去。是否通过,只需要设置初始触发时间为currentTime + difference即可。

希望它能有所启发。

关于java - 检测当前时间是否在两个设置时间之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198725/

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