Учитывая случай использования пользователем выбора обратного интервала времени в приложении для Android
Приложение для Android будет уведомлять пользователя только между временными интервалами, выбранными пользователем.
Настройки будут иметь два таймера для хранения TIME1
а также TIME2
Я планирую хранить время в формате INT, как предлагается по следующей ссылке
ссылка -> Хранить время в типе данных INT в SQL
Следуя вышеприведенному подходу при сравнении с текущим временем:
ИСПОЛЬЗОВАТЬ СЛУЧАЙ 1
TIME1 | TIME2 | Currenttime
03:00(180 INT) | 06:00(360 INT) | 05:00(300 INT)
TIME1 <= Currenttime <= TIME2 (USER WILL RECEIVE NOTIFICATION)
ИСПОЛЬЗОВАТЬ СЛУЧАЙ 2 (время2 <время1)
Должен ли я даже позволить пользователю выбрать время 2
TIME1 | TIME2 | Currenttime
22:00(1320 INT) | 01:00(60 INT) | 23:00(1380 INT)
TIME1 < Currenttime > TIME2
1320 < 1380 > 60
22:00 < 23:00 < 01:00
( with respect to realtime when user wants to get notified at midnight)
in this case user should actually get the notification if reverse time is allowed.
considering user wants notification during midnight.
if((Currentime > time2 && Currentime <= 1439)|| (Currentime > 0 && Currentime <= time1)){
// notify here // 1439 == 23:59
}
USE CASE 3 (возникает, если разрешен сценарий использования 2 / фактически такой же, как 2 bu с большим интервалом времени)
consider same case as 2 but time as:-
TIME1 | TIME2
15:00(900 INT) | 10:00(600 INT)
This means USER DOES NOT WANT NOTIFICATION form morning 10:01 to afternoon 14:59
But user wants it for rest of the time like from afternoon 15:00 to next day morning 10:00
Я думаю, что это лучший способ сделать, но я хочу знать, есть ли лучший подход? или проще подход? плюс пользователю следует разрешить устанавливать обратное время? если нет, то пользователь не сможет установить полуночные интервалы.
Помощь приветствуется.
1 ответ
Попробуйте ниже класс помощника, я думаю, что это именно то, что вы хотите.
public class CalenderUtil {
public static void main(String[] args) {
String TIME_FORMAT = "hh:mm a";
String initialTime, finalTime, currentTime;
initialTime = "9:00 AM"; finalTime = "11:00 AM"; currentTime = "10:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "9:00 AM"; finalTime = "12:00 PM"; currentTime = "11:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 AM"; finalTime = "8:00 PM"; currentTime = "11:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 AM"; finalTime = "8:00 PM"; currentTime = "11:00 PM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 PM"; finalTime = "8:00 AM"; currentTime = "11:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 PM"; finalTime = "8:00 AM"; currentTime = "6:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
}
public static boolean isCurrentTimeBetweenGivenTime(String initialTime, String finalTime, String currentTime, String timeFormat) {
System.out.print("initialTime=" + initialTime + ", finalTime=" + finalTime + ", currentTime=" + currentTime);
boolean valid = false;
String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH).format(new Date());
try {
//Start Time
Date inTime = new SimpleDateFormat("dd-MM-yyyy " + timeFormat, Locale.ENGLISH)
.parse(currentDate + " " + initialTime);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(inTime);
//End Time
Date finTime = new SimpleDateFormat("dd-MM-yyyy " + timeFormat, Locale.ENGLISH)
.parse(currentDate + " " + finalTime);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(finTime);
Date actualTime = new SimpleDateFormat("dd-MM-yyyy " + timeFormat, Locale.ENGLISH)
.parse(currentDate + " " + currentTime);
Calendar calendar3 = Calendar.getInstance();
calendar3.setTime(actualTime);
if (inTime.after(finTime)) {
calendar2.add(Calendar.DATE, 1);
if (actualTime.before(finTime)) {
calendar3.add(Calendar.DATE, 1);
}
}
if ((calendar3.after(calendar1) || calendar3.equals(calendar1))
&& (calendar3.before(calendar2) || calendar3.equals(calendar2))) {
valid = true;
}
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(" ==> Result:" + valid);
return valid;
}
}
Результат:
initialTime=9:00 AM, finalTime=11:00 AM, currentTime=10:00 AM ==> Result:true
initialTime=9:00 AM, finalTime=12:00 PM, currentTime=11:00 AM ==> Result:true
initialTime=8:00 AM, finalTime=8:00 PM, currentTime=11:00 AM ==> Result:true
initialTime=8:00 AM, finalTime=8:00 PM, currentTime=11:00 PM ==> Result:false
initialTime=8:00 PM, finalTime=8:00 AM, currentTime=11:00 AM ==> Result:false
initialTime=8:00 PM, finalTime=8:00 AM, currentTime=6:00 AM ==> Result:true