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

时间:2019-03-07 16:05:13

标签: java android kotlin format string-formatting

我的应用程序以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>

我尝试将字符串“ 00:”手动替换为“”,但在第三个示例中却失败了。另外,我认为标准格式应该提供类似的内容,但是我一直找不到它。

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

2 个答案:

答案 0 :(得分:1)

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

  

此类包含用于创建文本的各种与日期有关的实用程序   对于经过的时间和日期范围之类的内容,   周和月,以及AM / PM文本等。

其中带有便捷的formatElapsedTime()方法;会按照您期望的格式设置持续时间。

  

将经过的时间格式设置为“ MM:SS”或“ H:MM:SS”…

很遗憾,您提到的最后一种格式(仅显示秒)很少见,因此DateUtils不支持。尽管可以通过以下功能轻松解决此问题。

fun formatDuration(seconds: Long): String = if (seconds < 60) {
    seconds.toString()
} else {
    DateUtils.formatElapsedTime(seconds)
}

答案 1 :(得分:0)

到目前为止,我还没有在意见解决方案中找到任何优雅的方法,我是那样做的。

我有3个格式化字符串,每种情况下一个:

docker socket

然后,我使用功能(在Kotlin中)手动对其进行格式化:

localhost