Spring data jpa从oracle数据库表中返回不一致的Date值。

问题描述 投票:0回答:1
  • 我在oracle db有一张表,表中有一列last_updt_dt,数据类型为Date。
  • 我使用spring data jpa和hibernate版本5.3.12 final.表中的实体类包含如下日期字段

    @Column(name = "last_updt_dt") private LocalDateTime lastUpdtDt;

  • 如果我通过我的应用程序插入日期并检索它,那么它就会显示出预期的行为.例如,在数据库中,它显示出以下值(24小时格式)

    28-04-2020 00:32:02

而在应用程序中,如果我的服务器时区是AEST,那么它就会将上述值显示为

2020-04-28T10:32:02

哪个是正确的(db中的utc值和我的应用程序中收到的AEST值是正确匹配的)。

  • 但是,我在同一个数据库表中有一些现有的记录,如果我试图检索这些记录,那么在我的应用程序中,日期显示错误的值。如果我试图检索这些记录,那么在我的应用程序中,日期显示错误的值。例如,数据库表显示以下值(24小时格式

    11-01-2017 09:36:34

而在应用程序中,如果我的服务器时区是AEST,那么它就会将上述值显示为

2017-01-11T20:36:34

如果我把这个utc时间09:36:34转换成AEST时间,那么它给我的时间是19:36:34,而我在这里看到的是20:36:34,多了一个小时。

所以,我无法理解这种行为。

  • 如果我从我的spring boot应用程序中插入日期并检索它,在db中输入的日期和jpa返回的日期是一致的。
  • 但如果我试图读取没有被我的应用程序插入的日期,但它已经存在于db中,那么jpa返回的日期与db的值不匹配,事实上,它显示我比预期值多一个小时。这种情况发生在该表中所有现有的日期值上。(不是我的spring boot程序输入的那个)

有谁对这种行为有任何线索?

我的应用程序是使用jhipster 6.4.1创建的,我观察到有一个DateTimeFormatConfiguration类,其中包含以下方法。

@Override
    public void addFormatters(FormatterRegistry registry) {
        DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
        registrar.setUseIsoFormat(true);
        registrar.registerFormatters(registry);
    }

不知道,这是否有什么作用。

oracle hibernate java-8 spring-data-jpa jhipster
1个回答
0
投票

谢谢大家的回答,我已经找到了问题所在,codespring数据jpaoraclejhipster没有问题,问题出在我的计算上。

我觉得没有按照我的预期工作的日期是这样的:11-01-2017 09:36:34。

这个utc日期是2020年1月11日,如果我把它转换为AEST,它是+11小时,因为它是在日光节约期间。所以我的应用是显示我正确的日期时间是2017-01-11T20:36:34。

我觉得工作正常的日期是这个:28-04-2020 00:32:02这个utc日期2020年4月28日,那里没有夏令时,如果我想把这个转换为AEST,那么我应该加上+10小时。

基本上,我是比较错误的日期,一个是在白天的光照节约和其他是在白天的光照节约结束后,这就是为什么,我得到不同的结果,我想我的应用程序是失败的地方给我一致的datetimes.但这不是真的,我应用错误的计算。

© www.soinside.com 2019 - 2024. All rights reserved.