【问题标题】:date issue in java when upgraded from java 1.4 to java 8 [closed]从java 1.4升级到java 8时java中的日期问题[关闭]
【发布时间】:2019-03-14 05:49:59
【问题描述】:

最近我们将 UNIX 中的 java 运行时环境从 jdk 1.4 升级到 jdk 8。我们发现,插入到 oracle 数据库中的日期带有时间戳 (dd-mm-yyyy hh:mm:ss)。在升级之前,它只是日期(dd-mm-yyyy)。这是由于jdk升级造成的吗?升级到 JDK 8 后,使用了在 JDK 1.4 中运行的相同版本。 JDK 6 也面临这个问题。

有没有人遇到过这种情况。我无法理解,只是升级 java 环境会产生这个问题,因为没有代码更改。

JDK 1.4 中的默认日期格式是否与 JDK8 或 6 不同。

有什么方法可以在不修改代码的情况下克服这个问题,比如使用 SimpleDateFormat 等将日期转换为所需的格式。 下面是我们用来将日期转换为所需格式的代码。

SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-yyyy");
java.util.Date d = sdf.parse(inputDate);
stmt.setDate(1, new java.sql.Date(d.getTime()));

【问题讨论】:

  • 有趣的问题,但如果没有代码,我们可能没有机会进行诊断。问题可能出在很多地方,所以除非有人解决了完全相同的问题——即使在那种情况下——我们也只能猜测。
  • Oracle 数据库定义了两 (2) 个日期/时间数据类型,DATE 和 TIMESTAMP。它们都包含日期和时间。所以我不明白你所说的只有日期(dd-mm-yyyy)是什么意思。
  • 从来没有“JDK 4”。有一个 jdk1.4 被标记为“Java 2”。

标签: java oracle date java-8 jdk1.6


【解决方案1】:

我们也遇到过同样的问题,但是当我们查看代码时,发现我们使用了java.sql.Timestamp

我们更改为 java.sql.Date 作为 Java 中的返回类型。此外,在 ORACLE 数据库中,数据类型称为 DATE

检查Java中的返回类型,如果仍未解决,请更新

【讨论】:

  • TimestampDate 这两个类都很糟糕,现在是 legacy。充斥着设计缺陷和黑客。几年前,它们都被 java.time 类所取代。在 JDBC 4.2 或更高版本中使用 OffsetDateTimeOffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class );myPreparedStatement.setObject( … , odt ) ;
【解决方案2】:

如果您使用开始日期和结束日期,您可以简单地在 dao 层中使用以从数据库中获取数据

date_trunc('day',fileUploadDate) between to_timestamp(:startDate, 'dd/MM/YYYY HH:mm:ss.S') and to_timestamp(:endDate, 'dd/MM/YYYY HH:mm:ss.S')

在控制器中使用

SimpleDateFormat sdf =  new SimpleDateFormat("dd/MM/yyyy",Locale.ENGLISH);

【讨论】:

  • 感谢您的贡献。请不要教年轻人使用臭名昭著的麻烦和过时的SimpleDateFormat类。提问者刚刚升级到 Java 8,所以没有理由不享受 java.time, the modern Java date and time API 和它的 DateTimeFormatter
  • 亲爱的,我不是在教你。我认为这可能对你有帮助,我已经给出了我的观点,因为这个世界上没有人是完美的。但我很清楚一件事“很多人们受过教育,但并不完全有礼貌。”
猜你喜欢
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多