mm:ss:SSS 到 LocalTime Kotlin/Java 类型的字符串

String of type mm:ss:SSS to LocalTime Kotlin/Java

我有一个时间字符串 03:02:111,它的模式是 mm:ss:SSS。我想将其转换为 LocalTime 对象。

毫米 -> 分钟

ss -> 秒

SSS -> 米尔斯

简单例子:

val time = "03:02:111"
val formatter = DateTimeFormatter.ofPattern("mm:ss:SSS")
val convertedTime = LocalTime.parse(time, formatter)
print(convertedTime.toString())

我得到以下异常:

java.time.format.DateTimeParseException: Text '03:02:111' could not be parsed: Unable to obtain LocalTime from TemporalAccessor: {MicroOfSecond=111000, MilliOfSecond=111, NanoOfSecond=111000000, SecondOfMinute=2, MinuteOfHour=3},ISO of type java.time.format.Parsed

有人可以解释为什么这不起作用吗?我也检查了两次模式。

问题是你没有定义小时。这意味着你必须构建一个更智能的格式化程序,告诉它哪个小时应该是默认值:

fun main(args: Array<String>) {
    val time = "03:02:111"
    val formatter = DateTimeFormatterBuilder()
        .appendPattern("mm:ss:SSS")
        .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
        .toFormatter()
    val convertedTime = LocalTime.parse(time, formatter)
    print(convertedTime.toString())
}

当然,这只有在分钟小于 60 时才有效。如果你没有这个保证,那么你就需要另一种方法了。