【问题标题】:Parse datetime with ISO format in Scala [duplicate]在Scala中使用ISO格式解析日期时间[重复]
【发布时间】:2018-12-14 21:39:00
【问题描述】:

我应该使用哪种格式来解析 Scala 中的字符串日期(使用 ISO 8601)?

2018-12-13T19:19:08.266120+00:00

我只是尝试了一些模式,但没有成功。这段代码向我显示了一个作为字符串的近期日期,但是当我尝试使用上面的字符串和时区信息时,我得到了错误。

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.'SXXX").format(new Date())

结果:

2018-12-14T17:41:24.929-02:00

错误:

java.text.ParseException:无法解析的日期: “2018-12-13T19:19:08.266120+00:00”在 java.text.DateFormat.parse(DateFormat.java:366) ... 29 省略

【问题讨论】:

  • 不要使用SimpleDateFormat。一来是出了名的麻烦,二来它不能在秒(微秒)内解析 6 位小数,它只支持毫秒。幸运的是,它也早已过时,被现代 Java 日期和时间 API java.time 的 DateTimeFormatter 所取代。
  • 我无法重现您的错误。我得到Thu Dec 13 20:23:34 CET 2018。结果显然不正确,所以我更喜欢这个例外。

标签: java scala simpledateformat iso8601


【解决方案1】:

DateTimeFormatter class 包含许多预定义格式,包括一些 ISO 格式。这似乎适用于您的示例String

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter._

val dts = "2018-12-13T19:19:08.266120+00:00"
LocalDateTime.parse(dts, ISO_DATE_TIME)
//res0: java.time.LocalDateTime = 2018-12-13T19:19:08.266120

【讨论】:

  • 更好的是,使用单参数OffsetDateTime.parse(String)。不需要显式格式化程序,您还将从字符串中获取偏移量(在本例中为 +00:00)。
  • 有效!非常感谢@jwvh
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2019-02-11
  • 2015-12-26
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多