在其他帖子中,我按照步骤将时区设置为UTC。
我将UTC设置为springboot应用程序中的默认值
@SpringBootApplication
class MyApplication {
@PostConstruct
fun setDefaultTimezone() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"))
}
}
然后进入休眠状态
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
但是当我打电话给findAllComputations(见下文)时,我得到了错误的时区。
@Entity
data class ChartRecord(
@Id val x: String,
@Column val y: Double,
@Column val category: String
)
interface EvolutionRepository : Repository<ChartRecord, String> {
@Query(
value = """select * from computeStats(:timezone)""",
nativeQuery = true
)
fun findAllComputations(timezone: String): List<ChartRecord>
}
如果我直接从PostgreSQL控制台执行该查询,结果是正确的,所以我想jdbc的时区错误,因为springboot应用程序没有管理任何日期。
为澄清起见,ChartRecord中的x
参数用于返回小时,天等。
更新
通过将SET timezone to UTC
添加为postgres函数computeStats
中的第一条语句,可以计算出正确的结果。
最重要的是,将休眠配置更改为另一个时区没有任何区别,看起来该属性已被忽略。