【问题标题】:String of type mm:ss:SSS to LocalTime Kotlin/Javamm:ss:SSS 到 LocalTime Kotlin/Java 类型的字符串
【发布时间】:2022-01-08 16:45:00
【问题描述】:

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

mm -> 分钟

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: 文本 '03:02:111' 不能 已解析:无法从 TemporalAccessor 获取 LocalTime: {MicroOfSecond=111000, MilliOfSecond=111, NanoOfSecond=111000000, SecondOfMinute=2, MinuteOfHour=3},ISO 类型为 java.time.format.Parsed

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

【问题讨论】:

  • 顺便说一句,像mm:ss:SSS 这样的格式不是standard 并且可能会造成混淆;毫秒通常以. 开头,因此这种格式的时间很容易被误认为HH:mm:ss。当然,这可能是一个固定的要求;但如果没有,您可能会考虑更改它。
  • 是的,我已经考虑过了。无论如何,这是一个固定的要求。感谢您的意见。
  • 我猜你有 - 但觉得值得一提,作为对其他阅读此问题的人的警告:-)

标签: java kotlin java-time


【解决方案1】:

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

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 时才有效。如果您没有此保证,则需要另一种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2022-12-13
    • 2012-07-11
    相关资源
    最近更新 更多