Я должен предпринять действия, если время падает между временем старта и остановки и в определенный день.Я сослался на некоторые существующие потоки на SO, чтобы проверить, попадает ли время в указанный диапазон времени.
Скажите, если время начала 23:00, время остановки 7:00 и текущее время 2:00.Просто функция валидности по времени возвращает true.Но если я включу дни в этот код, функция вернет false.Например: пользователь выбирает [понедельник, вторник, среда].Несмотря на то, что четверга нет в списке, но время окончания 7:00 утра приходится на четверг, действие может быть предпринято в любое время с 23:00 вечера. Среда - 7:00 четверга, но действие не может быть предпринято в 23:00 четверга или в другие дни.упоминается в списке.
Ниже мой код:
private fun isCurrentTimeBetweenProvidedTime(context: Context): Boolean {
var reg = "^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$".toRegex()
val startTime = getStartTime()
val endTime = getEndTime()
val currentTime = getCurrentTime()
if (reg.containsMatchIn(startTime) && reg.containsMatchIn(endTime) && reg.containsMatchIn(currentTime)) {
var valid = false
var startTime = SimpleDateFormat("HH:mm:ss").parse(startTime)
var startCalendar = Calendar.getInstance()
startCalendar.time = startTime
var currentTime = SimpleDateFormat("HH:mm:ss").parse(currentTime)
var currentCalendar = Calendar.getInstance()
currentCalendar.time = currentTime
var endTime = SimpleDateFormat("HH:mm:ss").parse(endTime)
var endCalendar = Calendar.getInstance()
endCalendar.time = endTime
if (currentTime.compareTo(endTime) < 0) {
currentCalendar.add(Calendar.DATE, 1)
currentTime = currentCalendar.time
}
if (startTime.compareTo(endTime) < 0) {
startCalendar.add(Calendar.DATE, 1)
startTime = startCalendar.time
}
if (currentTime.before(startTime)) {
valid = false
} else {
if (currentTime.after(endTime)) {
endCalendar.add(Calendar.DATE, 1)
endTime = endCalendar.time
}
if (currentTime.before(endTime)) {
valid = true
} else {
valid = false
}
}
// This won't work if day is Thursday and time is 2:00am, even though time falls between 23:00-7:00
var todayCalendar = Calendar.getInstance()
if ((currentTime >= startTime && todayCalendar.get(Calendar.DAY_OF_WEEK) in selectedDays.values) &&
(currentTime <= endTime && (todayCalendar.get(Calendar.DAY_OF_WEEK) in selectedDays.values || todayCalendar.get(Calendar.DAY_OF_WEEK)-1 in selectedDays.values))) {
Log.d(TAG, "Days are valid")
}
return valid
}
return false
}
Как мне справиться со сценарием дней?