Spring 数据 jpa 从 oracle 数据库返回不一致的 Date 值 table
Spring data jpa returning inconsistent values of Date from oracle database table
- 我在 oracle db.The 中有一个 table table 包含数据类型为日期的列 last_updt_dt。
我正在使用 spring 数据 jpa 和休眠版本 5.3.12 final。
table 的实体 class 包含如下日期字段
@Column(名称="last_updt_dt")
私人 LocalDateTime lastUpdtDt;
如果我通过我的应用程序插入日期并检索它,那么它会显示预期的行为。
对于 Ex,在数据库中,它显示以下值(24 小时格式)
28-04-2020 00:32:02
并且在应用程序中,如果我的服务器时区是 AEST,则上面的值显示为
2020-04-28T10:32:02
这是正确的(db 中的 utc 值和我的应用程序中收到的 AEST 值正确匹配)
但是,我在同一数据库中有一些现有记录 table。
如果我尝试检索这些记录,那么在我的应用程序中,日期会显示错误的值。
对于 Ex,数据库 table 显示以下值(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 启动应用程序中插入日期并检索它,在 db 中输入的日期与 jpa
返回的日期一致
- 但是如果我尝试读取不是由我的应用程序插入的日期,它已经存在于 db 中,那么 jpa 返回的日期与 db 值不匹配,事实上,它显示了一个多小时与预期值相比。 table 中的所有现有日期值都会发生这种情况。 (不是我的 spring 引导应用程序输入的那个)
有人知道这种行为吗?
我的应用程序是使用 jhipster 6.4.1 创建的,我发现有一个 DateTimeFormatConfiguration class 包含以下方法
@Override
public void addFormatters(FormatterRegistry registry) {
DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
registrar.setUseIsoFormat(true);
registrar.registerFormatters(registry);
}
不确定,这是否在起作用。
谢谢大家的回答。
我发现了问题。
code/spring 数据 jpa/oracle/jhipster 没有问题。
问题出在我的计算上。
我觉得没有按照我的预期工作的日期是这样的:
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.but 那不是真的,我计算错了。
- 我在 oracle db.The 中有一个 table table 包含数据类型为日期的列 last_updt_dt。
我正在使用 spring 数据 jpa 和休眠版本 5.3.12 final。 table 的实体 class 包含如下日期字段
@Column(名称="last_updt_dt") 私人 LocalDateTime lastUpdtDt;
如果我通过我的应用程序插入日期并检索它,那么它会显示预期的行为。 对于 Ex,在数据库中,它显示以下值(24 小时格式)
28-04-2020 00:32:02
并且在应用程序中,如果我的服务器时区是 AEST,则上面的值显示为
2020-04-28T10:32:02
这是正确的(db 中的 utc 值和我的应用程序中收到的 AEST 值正确匹配)
但是,我在同一数据库中有一些现有记录 table。 如果我尝试检索这些记录,那么在我的应用程序中,日期会显示错误的值。 对于 Ex,数据库 table 显示以下值(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 启动应用程序中插入日期并检索它,在 db 中输入的日期与 jpa 返回的日期一致
- 但是如果我尝试读取不是由我的应用程序插入的日期,它已经存在于 db 中,那么 jpa 返回的日期与 db 值不匹配,事实上,它显示了一个多小时与预期值相比。 table 中的所有现有日期值都会发生这种情况。 (不是我的 spring 引导应用程序输入的那个)
有人知道这种行为吗?
我的应用程序是使用 jhipster 6.4.1 创建的,我发现有一个 DateTimeFormatConfiguration class 包含以下方法
@Override
public void addFormatters(FormatterRegistry registry) {
DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
registrar.setUseIsoFormat(true);
registrar.registerFormatters(registry);
}
不确定,这是否在起作用。
谢谢大家的回答。 我发现了问题。 code/spring 数据 jpa/oracle/jhipster 没有问题。 问题出在我的计算上。
我觉得没有按照我的预期工作的日期是这样的: 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.but 那不是真的,我计算错了。