My application displays time left in such format hh:mm:ss, for example, 01:05:45 what stands for one hour 5 minutes and 45 seconds.
When hours or minutes are zero I would like not to display them. Currently, if 45 seconds are remaining my timer will show '00:00:45'. The expected result is just '45'.
I need some kind of Java/Kotlin/Android method to produce the following outputs:
Currently I use such string as a formatter:
<string name="time_default_formatter" translatable="false">%02d:%02d:%02d</string>
I tried to manually replace string "00:" with "" but it fails when it comes to a 3rd example. Also, I think standard formatting should provide something like that but I keep failing to find it.
Edit: I can do it in code. The thing is I am looking for an elegant solution.
String resources are meant for displaying actual text in a way that is easily localizable. They aren't meant for formatting dates and times; that's what DateUtils
is for.
This class contains various date-related utilities for creating text for things like elapsed time and date ranges, strings for days of the week and months, and AM/PM text etc.
Which comes with a convenient formatElapsedTime()
method that formats a duration as you would expect.
Formats an elapsed time in the form "MM:SS" or "H:MM:SS"…
Unfortunately the last format you mentioned (which only displays seconds) is fairly uncommon, therefore unsupported by DateUtils
. Though this can be easily remedied with the following function.
fun formatDuration(seconds: Long): String = if (seconds < 60) {
seconds.toString()
} else {
DateUtils.formatElapsedTime(seconds)
}