代码之家  ›  专栏  ›  技术社区  ›  K.Os

如何解析包含日期和时区到日期时间的字符串

  •  1
  • K.Os  · 技术社区  · 6 年前

    我有这样的字符串,可以这样格式化(取决于时区,例如):

    “2018-10-17T15:33:15 UTC”

    “2018-10-17T17:03:00欧洲/布拉格

    “2018-10-18T12:00:00美国/肯塔基州/蒙蒂塞洛”

    所以这些字符串的末尾包含区域id

    如何解析这些字符串到datetime?

    我想说的是:

    val dateString = "2018-10-18T12:00:00 America/Kentucky/Monticello"
    
        ISODateTimeFormat
        .dateTimeParser()
        .parseDateTime(dateString)
    

    更新:

    我也试过:

    val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss zzzz")
    
    
    val parsed: Date = simpleDateFormat.parse(dateString)
    

    但无法解析

    1 回复  |  直到 6 年前
        1
  •  4
  •   Rene    6 年前

    你可以创建自己的 DateTimeFormatter :

    val date1 = "2018-10-17T15:33:15 UTC"
    val date2 = "2018-10-17T17:03:00 Europe/Prague"
    val date3 = "2018-10-18T12:00:00 America/Kentucky/Monticello"
    
    //with JDK
    val formatter = java.time.format.DateTimeFormatterBuilder()
        .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
        .optionalStart()
        .appendLiteral(' ')
        .parseCaseSensitive()
        .appendZoneRegionId()
        .toFormatter();
    println(ZonedDateTime.parse(date1, formatter))
    println(ZonedDateTime.parse(date2, formatter))
    println(ZonedDateTime.parse(date3, formatter))
    
    //With Joda Time
    val jodaFormatter = org.joda.time.format.DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd'T'HH:mm:ss ZZZ").toFormatter()
    println(jodaFormatter.parseDateTime(date1))
    println(jodaFormatter.parseDateTime(date2))
    println(jodaFormatter.parseDateTime(date3))
    

    此格式化程序只能解析“europe/prague”,而不能解析“europe/praga”。您可以在此处找到所有支持的区域标识: https://www.mkyong.com/java8/java-display-all-zoneid-and-its-utc-offset/