【问题标题】:ParseException - Unparseable date exception in Java [duplicate]ParseException - Java 中不可解析的日期异常 [重复]
【发布时间】:2020-07-12 14:52:43
【问题描述】:

我有列数据类型为 "TIMESTAMP(0) WITH TIME ZONE" 的 oracle 数据库。哪个生产 比如 14/11/2019 06:30:00, +03:00 在数据库中。

当我试图从 java 获取这个时间戳时 我得到了java.text.ParseException: Unparseable date: "28-MAY-12 07.40.03 PM +03:00"。我们的项目 java 版本是 6 。我试过了

      new SimpleDateFormat("dd-MM-yy hh.mm.ss") ,
      new SimpleDateFormat("dd-MM-yy hh.mm.ss, Z"),
      new SimpleDateFormat("dd-MM-yy hh.mm.ss, z")  ,
      new SimpleDateFormat("dd/MM/yy hh.mm.ss, z") ,
      new SimpleDateFormat("dd/MM/yy hh.mm.ss, Z") ,
      new SimpleDateFormat("dd/MM/yy hh.mm.ss")

但他们都没有为我工作所有的投掷java.text.ParseException: Unparseable date error.

在我的 java 端,我的类中有日期数据类型属性,我想从 oracle 数据库中检索数据,然后解析然后设置为日期数据类型属性,如下所示。

serDto.setTarih(new Timestamp(new SimpleDateFormat("dd-MM-yy hh.mm.ss").parse(str).getTime()));

对于前数据库时间戳数据看起来像:14/11/2019 06:30:00,+03:00,我想像上面一样检索日期。

提前谢谢你。

【问题讨论】:

  • 你试图解析的字符串来自哪里?有没有办法将其格式更改为更易于解析的格式?
  • 我正在读取 xml 文档元素,如 element.getElementsByTagName("PLZ_ID").item(0).getTextContent() 到 str 然后尝试解析。
  • 我建议你不要使用SimpleDateFormatDateTimestamp。这些类设计不佳且过时已久,尤其是第一个类是出了名的麻烦。而是从您的数据库中从java.time, the modern Java date and time API 获取OffsetDateTime。那么你可能不需要解析。

标签: java date date-format


【解决方案1】:

部分解决方案是更改模式,以便解析月份名称和上午/下午标记。将MM更改为MMM并添加a

new SimpleDateFormat("dd-MMM-yy hh.mm.ss a").parse(str)

但是,这将忽略时区信息。它将返回运行此代码的默认本地时区中的预期时间(即 07:40:03 PM)的日期,该时区可能与输入 GMT+0300 中的时区不同。

在 Java 6 中似乎没有办法将 +03:00 解析为带有 SimpleDateFormat 的时区,因此如果您需要解析时区,则需要更多自定义代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2011-01-01
    • 1970-01-01
    • 2019-12-09
    相关资源
    最近更新 更多