我使用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,多了一个小时。
所以,我无法理解这种行为。
有谁对这种行为有任何线索?
我的应用程序是使用jhipster 6.4.1创建的,我观察到有一个DateTimeFormatConfiguration类,其中包含以下方法。
@Override
public void addFormatters(FormatterRegistry registry) {
DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
registrar.setUseIsoFormat(true);
registrar.registerFormatters(registry);
}
不知道,这是否有什么作用。
谢谢大家的回答,我已经找到了问题所在,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.但这不是真的,我应用错误的计算。