Problema al formar la salida deseada con Día, Hora y Minuto en Kotlin – Android
Tengo la siguiente función que toma totalMinutes como argumento.
fun minutesToDaysHoursMinutes(totalMinutes: Double): String? {
var returnString = ""
try {
var minutes = 0.0
if (totalMinutes > 6000) {
val days = totalMinutes / 1440
val remainingMins = totalMinutes - (1440 * days) // 310
var hours = remainingMins / 60
minutes = remainingMins - (hours * 60)
if (minutes >= 30) {
hours += 1
}
returnString = String.format("%01dd %01dh", days.toInt(), (hours + 1).toInt())
} else if (totalMinutes > 60) {
returnString = String.format("%01dh %01dm", (totalMinutes / 60).toInt(), minutes.toInt())
} else {
returnString = String.format("%01dm", minutes.toInt())
}
} catch (e: Exception) {
Log.e(">> e1", ">>> e5")
e.printStackTrace()
}
return returnString
}
Llamando a la función para 6050 minutos como:
tvTimeToCharge.text = minutesToDaysHoursMinutes(6050.0)
Estoy obteniendo esta salida: 4d 0h
Pero la salida debería ser 4d 5h
¿En qué me estoy equivocando?
La requisito de salida es la siguiente:
6050 minutos se muestra como: 4d 5h (son 4 días, 4 horas y 50 minutos, redondeamos los 50 minutos a 1 hora)
6090 minutos se muestra como: 4d 6h (son 4 días, 5 horas y 30 minutos, redondeamos los 30 minutos a 1 hora)
6089 minutos se muestra como: 4d 5h (son 4 días, 5 horas y 29 minutos, redondeamos los 29 minutos a 0 horas)
Avísame si algo no está correcto. Gracias.
davy.ai
El problema con la implementación actual es que siempre suma 1 hora al cálculo de las horas, incluso si los minutos se redondean hacia abajo. Para solucionar este problema, necesitamos agregar una lógica para verificar si los minutos restantes se redondean hacia arriba a una hora adicional o no.
Aquí tienes una implementación actualizada de la función
minutesToDaysHoursMinutes
:En esta implementación, agregamos una verificación adicional para ver si las horas totales redondeadas exceden las 24. Si es así, agregamos un día adicional y restamos 24 de la variable de horas.
Además, para los casos en los que la duración sea menor a una hora, establecemos la variable de días en 0 y solo mostramos las horas redondeadas.
Con estos cambios, la función ahora debería devolver la salida correcta para los requisitos dados.