Estaba usando TimeUnit.MILLISECONDS.toDays(ms) para convertir una cantidad de tiempo de milisegundos en días, pero al leer el JavaDoc noté que se basa en .convert() y pierde precisión
Convierta la duración del tiempo dado en la unidad dada a esta unidad. Las conversiones de granularidades más finas a más gruesas se truncan, por lo que pierden precisión. Por ejemplo, la conversión de 999 milisegundos a segundos da como resultado 0. Las conversiones de granularidades más gruesas a más finas con argumentos que se desbordarían numéricamente se saturan a Long.MIN_VALUE si es negativo o Long.MAX_VALUE si es positivo.
Realmente no se lo esperaba, mis 5 minutos (300000ms) se convirtieron en 0 días. La solución inmediata fue escribir esto
double days= (double)ms/1000*60*60*24;Es horrible y creo que innecesario, pero funciona. ¿Algún consejo? ¿Alguna otra función que pueda usar?
pd: no estoy esperando que me diga que debo poner esos números en vars estáticos, estoy tratando de entender qué tipo de solución sería una buena solución. Gracias por adelantado
Simplemente use TimeUnit al revés:
double days = ms / (double) TimeUnit.DAYS.toMillis(1);