将字符串转换为LocalDate Kotlin

将字符串转换为LocalDate Kotlin,kotlin,Kotlin,我想转换字符串值 这是我的代码 val dateFirst = "20 Aug 2012" val dateSecond = "12/16/2020 12:00:00 AM" val dateFirstConverted = LocalDate.parse(dateFirst, DateTimeFormatter.BASIC_ISO_DATE) val dateSecondConverted = LocalDate.parse(dateSecond, D

我想转换字符串值 这是我的代码

val dateFirst = "20 Aug 2012"
val dateSecond = "12/16/2020 12:00:00 AM"

val dateFirstConverted = LocalDate.parse(dateFirst, DateTimeFormatter.BASIC_ISO_DATE)
val dateSecondConverted = LocalDate.parse(dateSecond, DateTimeFormatter.BASIC_ISO_DATE)

println(dateFirstConverted)
println(dateSecondConverted)
然后我得到这样的错误

Exception in thread "main" java.time.format.DateTimeParseException: Text '20 Aug 2012' could not be parsed at index 0
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.LocalDate.parse(LocalDate.java:400)
    at App.TryKt.main(try.kt:11)
    at App.TryKt.main(try.kt)

有人能帮我解决这个问题吗?

您有问题,因为日期的格式不受支持,我邀请您阅读本文,但如果您希望代码运行,请更改日期的格式,如下所示:

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.time.LocalDate

fun main() {
    //example
    val current = LocalDateTime.now()
    val formatter = DateTimeFormatter.BASIC_ISO_DATE
    val formatted = current.format(formatter)
    println("Current Date is: $formatted")
    
    //your code
    val dates = /*"20 Aug 2012"*/ "20120820"
    val datess = LocalDate.parse(dates, DateTimeFormatter.BASIC_ISO_DATE)
    println(datess)
}

tl;dr⇒ 您正在使用错误的模式进行分析

  • 您的日期
    字符串
    的格式为
    dd MMM uuuu
    (非ISO格式),但您正试图使用
    DateTimeFormatter.ISO\u LOCAL\u date

  • 您的datetime
    字符串的格式为
    MM/dd/uuu hh:MM:ss a
    (非ISO),但您试图使用
    DateTimeFormatter.ISO_LOCAL_DATE
    解析它,这至少是双重错误,因为格式化程序试图解析ISO日期。您的
    字符串
    是非ISO的,并且包含的信息(一天中的时间)超出了此格式化程序能够解析的范围

  • 有几个内置的
    DateTimeFormatter
    s,与您当前使用的类似,但您需要使用正确的一个,或者如果没有,请创建一个覆盖您的
    字符串的
    (通过
    DateTimeFormatter.of模式(…)
    或使用
    DateTimeFormatterBuilder

    下面是您的
    字符串的一个小示例
    示例:

    fun main(args:Array){
    //您的示例字符串
    val dateFirst=“2012年8月20日”
    val dateSecond=“12/16/2020 12:00:00 AM”
    //这里需要两个不同的格式化程序,字符串的格式和内容不同
    val firstFormatter=DateTimeFormatter.of模式(“dd MMM uuu”,Locale.ENGLISH)
    val secondFormatter=DateTimeFormatter.of模式(“MM/dd/uuu hh:MM:ss a”,Locale.ENGLISH)
    //然后根据您想要解析的内容使用这些
    val localDate=localDate.parse(dateFirst,firstFormatter)
    val localDateTime=localDateTime.parse(dateSecond,secondFormatter)
    //使用内置的格式化程序进行输出
    println(localDate.format(DateTimeFormatter.ISO\u LOCAL\u DATE))
    println(localDateTime.format(DateTimeFormatter.ISO\u LOCAL\u DATE\u TIME))
    }
    
    输出(ISO):

    2012-08-20
    2020-12-16T00:00:00
    
    DateTimeFormatter.BASIC\u ISO\u DATE
    可以解析的模式你知道吗?您试图解析的
    字符串
    不是这些格式,示例代码中的日期甚至与异常跟踪中的日期格式不同。