【问题标题】:Kotlin parse `MMYYYY` into YearMonthKotlin 将“MMYYYY”解析为 YearMonth
【发布时间】:2022-06-10 16:38:12
【问题描述】:

我想在 kotlin 中将 MMYYYY 字段解析为 YearMonth

试过的例子:

import java.time.YearMonth
import java.time.format.DateTimeFormatter
import java.time.format.DateTimeFormatterBuilder

val formatter: DateTimeFormatter = DateTimeFormatterBuilder()
            .parseCaseInsensitive()
            .appendPattern("MMYYYY")
            .toFormatter(Locale.ENGLISH)

println(YearMonth.parse("011970", formatter))

没用

【问题讨论】:

    标签: kotlin datetime parsing


    【解决方案1】:

    您的模式不正确,它使用基于周的年份 (Y) 而不是年份 (u) 或纪元年份 (y) 的符号。

    阅读更多关于JavaDocs of DateTimeFormatter 中的符号的信息,其中一些与此处相关的是:

    Symbol Meaning Presentation Examples
    G era text AD; Anno Domini; A
    u year year 2004; 04
    y year-of-era year 2004; 04
    M/L month-of-year number/text 7; 07; Jul; July; J
    Y week-based-year year 1996; 96

    我建议你切换到年份:

    import java.util.Locale
    import java.time.YearMonth
    import java.time.format.DateTimeFormatter
    import java.time.format.DateTimeFormatterBuilder
    
    val formatter: DateTimeFormatter = DateTimeFormatterBuilder()
                .parseCaseInsensitive()
                .appendPattern("MMuuuu")
                .toFormatter(Locale.ENGLISH)
    
    fun main() {
        println(YearMonth.parse("011970", formatter))
    }
    

    此代码打印1970-01

    如果您确定您将只收到数字 Strings,您可以也可以使用不太复杂的 DateTimeFormatter,只需检查是否区分大小写:

    val formatter = DateTimeFormatter.ofPattern("MMuuuu", Locale.ENGLISH)
    

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 2018-12-25
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多