Из других сообщений я следовал инструкциям, чтобы установить часовой пояс в формате 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 не управляет какими-либо датами.
Для пояснения, аргумент x
в ChartRecord используется для возврата часа, дня и т. Д.
ОБНОВЛЕНИЕ
Добавляя SET timezone to UTC
в качестве первого оператора внутри функции postgres computeStats
, он вычисляет правильный результат.
Кроме того, изменение конфигурации спящего режима на другой часовой пояс не имеет никакого значения, похоже, что это свойство игнорируется.