【问题标题】:Date Time formatting in scala error: "text could not be parsed at index 0"Scala 错误中的日期时间格式:“无法在索引 0 处解析文本”
【发布时间】:2021-09-20 15:01:08
【问题描述】:

我正在尝试使用 java.time.format 将字符串解析为时间戳。我希望它采用这种格式“dd/MM/yyyy HH:mm:ss”。这是我的代码。

val timeString = "Mon Sep 20 15:57:56 BST 2021"
val formatFinal = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")
val startTs = formatFinal.parse(timeString)

但是我收到了这个错误,我不知道为什么。我是 scala/java 的新手,所以可能错过了一些明显的东西。

 Text 'Mon Sep 20 15:57:56 BST 2021' could not be parsed at index 0

【问题讨论】:

  • Ham,您是否意识到您的数据与您使用的模式不对应?
  • 我应该改用val formatFinal = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy")吗?

标签: scala timestamp java-time


【解决方案1】:

这行得通。

import java.time.format.{DateTimeFormatter => DTF}

val timeString = "Mon Sep 20 15:57:56 BST 2021"
val formatFinal = DTF.ofPattern("E LLL dd HH:mm:ss z yyyy")
val startTs = formatFinal.parse(timeString)

//val startTs: java.time.temporal.TemporalAccessor = {InstantSeconds=1632113876},ISO,Pacific/Bougainville resolved to 2021-09-20T15:57:56

我不确定这是否是您想要的结果,但它会解析 timeString

【讨论】:

    【解决方案2】:

    将日期从字符串解析为LocalDateTime 并以不同的格式返回字符串,您需要有 2 个格式化程序,第一个从字符串中读取日期并将其解析为 LocalDateTime,另一个以您想要的格式将 LocalDateTime 写回字符串。

    val timeString = "Mon Sep 20 15:57:56 BST 2021"
    val formatSource = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy")
    val formatOuput = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")
    val startTs = LocalDateTime.parse(timeString, format).format(formatFinal)
    

    【讨论】:

    • 由于源字符串包含时区信息(虽然不明确),我会看看我是否可以正确解析为ZonedDateTime 而不是LocalDateTime,以免错过任何信息。我也肯定会为格式化程序提供一个语言环境,因为字符串是英文的,我们希望代码也能在英文安装上工作。
    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 2018-06-18
    • 2017-06-29
    • 2020-06-25
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多