是否可以在特定时间范围内的不同日子内显示TextView
中的不同文本?我正在尝试在决策陈述中进行此操作,但我不确定要使用多天的时间&涉及时间。
- 星期一至周五,上午6点至上午9:59(将文本设置为"可用"(
- 星期一至周五上午10点至上午11:59(将文本设置为"远"(
-
星期五下午12点至星期一5:59 AM(将文本设置为"不可用"(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val current = LocalTime.now() val formatter = DateTimeFormatter.ofPattern("HH:mm") val currentTime: String = current.format(formatter) val currentDay: String = LocalDate.now().dayOfWeek.name if (currentTime == "06:00" && currentDay == "MONDAY") { tv.setText(R.string.available) } else if (currentTime == "10:00" && currentDay == "MONDAY") { tv.setText(R.string.away) } else { tv.setText(R.string.unavailable) } } else { val date = Date() val formatter = SimpleDateFormat("hh:mm", Locale.getDefault()) val currentTime: String = formatter.format(date) val currentDay: String = LocalDate.now().dayOfWeek.name if (currentTime == "06:00" && currentDay == "MONDAY") { tv.setText(R.string.available) } else if (currentTime == "10:00" && currentDay == "MONDAY") { tv.setText(R.string.away) } else { tv.setText(R.string.unavailable) } }
我想建议您使用threetenabp库。用它可以写下这样的东西:
fun main() {
val now = LocalDateTime.now()
when (now.dayOfWeek) {
DayOfWeek.MONDAY,
DayOfWeek.TUESDAY,
DayOfWeek.WEDNESDAY,
DayOfWeek.THURSDAY -> {
when {
inRange(now, 6, 10) -> tv.setText(R.string.available)
inRange(now, 10, 12) -> tv.setText(R.string.away)
else -> tv.setText(R.string.unavailable)
}
}
DayOfWeek.FRIDAY -> {
//todo
}
else -> {
//todo
}
}
}
private fun inRange(now: LocalDateTime, start: Int, end: Int): Boolean =
now.isAfter(now.withHour(start)) && now.isBefore(now.withHour(end))
您还可以使用Java Calendar
类,但不那么方便:
import java.util.*
fun main() {
val now = Calendar.getInstance()
when (now.get(Calendar.DAY_OF_WEEK)) {
Calendar.MONDAY,
Calendar.TUESDAY,
Calendar.WEDNESDAY,
Calendar.THURSDAY -> {
when {
inRange(now, 6, 10) -> tv.setText(R.string.available)
inRange(now, 10, 12) -> tv.setText(R.string.away)
else -> tv.setText(R.string.unavailable)
}
}
Calendar.FRIDAY -> {
//todo
}
else -> {
//todo
}
}
}
private fun inRange(now: Calendar, startHour: Int, startMinutes: Int, endHour: Int, endMinutes: Int): Boolean {
val startTime: Calendar = now.clone() as Calendar
startTime.set(Calendar.HOUR_OF_DAY, startHour)
startTime.set(Calendar.MINUTE, startMinutes)
val endTime: Calendar = now.clone() as Calendar
endTime.set(Calendar.HOUR_OF_DAY, endHour)
endTime.set(Calendar.MINUTE, endMinutes)
return now.after(startTime) && now.before(endTime)
}