在 Kotlin 中将 ISO 8601 持续时间转换为人类可读的文本
Convert ISO 8601 duration to human-readable text in Kotlin
我有一个 ISO duration 的“PT11M1S”(来自 YouTube API)。我知道这意味着 11 分 1 秒,但有什么方法可以在 Kotlin 中自动将其转换为对用户有意义的文本(而不是“PT11M1S”字符串)?
谢谢!
目标:Java 8+
使用java.time
得到一个Duration对象。似乎没有 a great formatting solution, and the replaceAll
one ,所以这里有一个 Kotlin 等价物:
fun humanReadableDuration(s: String): String = java.time.Duration.parse(s).toString()
.substring(2).toLowerCase().replace(Regex("[hms](?!$)")) { "${it.value} " }
fun main() = println(humanReadableDuration("PT11M1S")) // prints "11m 1s"
正则表达式在 h/m/s 之后添加 spaces 但如果它是字符串的末尾则不添加,以避免尾随 space.
目标:任何
因为您已经从字符串开始,所以您可以完全避免 Duration 对象:
fun humanReadableDuration(s: String): String = s.substring(2)
.toLowerCase().replace(Regex("[hms](?!$)")) { "${it.value} " }
我有一个 ISO duration 的“PT11M1S”(来自 YouTube API)。我知道这意味着 11 分 1 秒,但有什么方法可以在 Kotlin 中自动将其转换为对用户有意义的文本(而不是“PT11M1S”字符串)?
谢谢!
目标:Java 8+
使用java.time
得到一个Duration对象。似乎没有 a great formatting solution, and the replaceAll
one
fun humanReadableDuration(s: String): String = java.time.Duration.parse(s).toString()
.substring(2).toLowerCase().replace(Regex("[hms](?!$)")) { "${it.value} " }
fun main() = println(humanReadableDuration("PT11M1S")) // prints "11m 1s"
正则表达式在 h/m/s 之后添加 spaces 但如果它是字符串的末尾则不添加,以避免尾随 space.
目标:任何
因为您已经从字符串开始,所以您可以完全避免 Duration 对象:
fun humanReadableDuration(s: String): String = s.substring(2)
.toLowerCase().replace(Regex("[hms](?!$)")) { "${it.value} " }