Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

866
Views
Java/Kotlin/Android: formatee la hora (hh:mm:ss) y elimine los ceros innecesarios desde el principio

Mi aplicación muestra el tiempo restante en formato hh:mm:ss, por ejemplo, 01:05:45, lo que significa una hora, 5 minutos y 45 segundos.

Cuando las horas o los minutos son cero, me gustaría no mostrarlos. Actualmente, si quedan 45 segundos, mi temporizador mostrará '00:00:45'. El resultado esperado es solo '45'.

Necesito algún tipo de método Java/Kotlin/Android para producir los siguientes resultados:

  • 1 hora 13 minutos y 10 segundos ==> 01:13:10
  • 0 horas 13 minutos y 10 segundos ==> 13:10
  • 3 horas 0 minutos y 16 segundos ==> 03:00:16
  • 0 hora 0 minutos y 5 segundos ==> 5

Actualmente uso esa cadena como formateador:

 <string name="time_default_formatter" translatable="false">%02d:%02d:%02d</string>

Traté de reemplazar manualmente la cadena "00:" con "" pero falla cuando se trata de un tercer ejemplo. Además, creo que el formato estándar debería proporcionar algo así, pero sigo sin encontrarlo.

Editar: puedo hacerlo en código. La cosa es que estoy buscando una solución elegante.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Los recursos de cadena están destinados a mostrar texto real de una manera que sea fácilmente localizable. No están destinados a formatear fechas y horas; para eso está DateUtils .

Esta clase contiene varias utilidades relacionadas con la fecha para crear texto para cosas como intervalos de fechas y tiempo transcurrido, cadenas para días de la semana y meses, y texto AM/PM, etc.

Que viene con un conveniente método formatElapsedTime() que formatea una duración como cabría esperar.

Formatea un tiempo transcurrido en la forma "MM:SS" o "H:MM:SS"...

Desafortunadamente, el último formato que mencionó (que solo muestra segundos) es bastante poco común, por lo tanto, DateUtils no lo admite. Aunque esto se puede remediar fácilmente con la siguiente función.

 fun formatDuration(seconds: Long): String = if (seconds < 60) { seconds.toString() } else { DateUtils.formatElapsedTime(seconds) }
over 4 years ago · Santiago Trujillo Report

0

Hasta ahora no he encontrado ninguna solución elegante en mi opinión y lo hago así.

Tengo tres cadenas de formato, una para cada situación:

 <string name="time_hours_minutes_seconds_formatter" translatable="false">%02d:%02d:%02d</string> <string name="time_minutes_seconds_formatter" translatable="false">%02d:%02d</string> <string name="time_seconds_formatter" translatable="false">%02d</string>

Luego, lo formateo manualmente usando la función (en Kotlin):

 private fun formatTime(millis: Long): String { val hours = TimeUnit.MILLISECONDS.toHours(millis) % 24 val minutes = TimeUnit.MILLISECONDS.toMinutes(millis) % 60 val seconds = TimeUnit.MILLISECONDS.toSeconds(millis) % 60 return when { hours == 0L && minutes == 0L -> String.format( resources.getString(R.string.time_seconds_formatter), seconds ) hours == 0L && minutes > 0L -> String.format( resources.getString(R.string.time_minutes_seconds_formatter), minutes, seconds ) else -> resources.getString(R.string.time_hours_minutes_seconds_formatter, hours, minutes, seconds) } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!