Java/Kotlin/Android - 格式化时间 (hh:mm:ss) 并从开头删除不必要的零

Mic*_*oka 1 java format android string-formatting kotlin

我的应用程序以 hh:mm:ss 格式显示剩余时间,例如,01:05:45 代表一小时 5 分 45 秒。

当小时或分钟为零时,我不想显示它们。目前,如果还剩 45 秒,我的计时器将显示“00:00:45”。预期的结果只是“45”。

我需要某种 Java/Kotlin/Android 方法来产生以下输出:

  • 1 小时 13 分 10 秒 ==> 01:13:10
  • 0 小时 13 分 10 秒 ==> 13:10
  • 3 小时 0 分 16 秒 ==> 03:00:16
  • 0 小时 0 分 5 秒 ==> 5

目前我使用这样的字符串作为格式化程序:

<string name="time_default_formatter" translatable="false">%02d:%02d:%02d</string>
Run Code Online (Sandbox Code Playgroud)

我试图用“”手动替换字符串“00:”,但在第三个例子中失败了。另外,我认为标准格式应该提供类似的东西,但我一直找不到它。

编辑:我可以用代码来做。问题是我正在寻找一个优雅的解决方案。

Bry*_*yan 12

字符串资源旨在以易于本地化的方式显示实际文本。它们不用于格式化日期和时间;这就是为什么DateUtils

此类包含各种与日期相关的实用程序,用于为经过的时间和日期范围、一周中的几天和几个月的字符串以及 AM/PM 文本等创建文本。

它带有一种方便的formatElapsedTime()方法,可以按照您的预期格式化持续时间。

以“MM:SS”或“H:MM:SS”的形式格式化经过的时间……

不幸的是,您提到的最后一种格式(仅显示秒)相当不常见,因此不受DateUtils. 虽然这可以通过以下功能轻松解决。

fun formatDuration(seconds: Long): String = if (seconds < 60) {
    seconds.toString()
} else {
    DateUtils.formatElapsedTime(seconds)
}
Run Code Online (Sandbox Code Playgroud)

  • 像梦一样工作。这正是我要找的:) (4认同)