Java/Kotlin/Android - 格式化时间 (hh :mm:ss) and remove unnecessary zeros from the beginning

标签 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:”替换为“”,但在第三个示例中失败。另外,我认为标准格式应该提供类似的东西,但我一直找不到它。

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

最佳答案

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

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.

配有方便的formatElapsedTime()按照您的预期格式化持续时间的方法。

Formats an elapsed time in the form "MM:SS" or "H:MM:SS"…

不幸的是,您提到的最后一种格式(仅显示秒)相当不常见,因此 DateUtils 不支持。尽管这可以通过以下函数轻松解决。

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

关于Java/Kotlin/Android - 格式化时间 (hh :mm:ss) and remove unnecessary zeros from the beginning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55048137/

相关文章:

java - Struts 2如何从请求中读取参数

android - 如何在 WebView 中启用缩放控件和捏缩放?

android - Kotlin Coroutines - 从 Coroutine 返回一个值而不阻塞主线程 Android

kotlin - 如何使用 Kotlin DSL 将插件应用到自身?

Java 8 Predicate - 为什么不能连接通配符泛型谓词?

java - Spring AOP 阻止 RestController

java - Keypad Java 应用程序编译,但不显示任何内容

android - 附加了 ORMlite 的 Javadoc,但 Eclipse 找不到

android - 在 Android 中将卷积矩阵算法从 Java 转换为 JNI 时未获得预期结果

java - Elasticsearch:如何调用与数组长度不一样的Java高级REST客户端