java Instant和MS SQL datetimeoffset
我正在使用spring、mybatis、mssql-jdbc-8.4.1 我有非常简单的测试代码来保存模型并从数据库中获取模型。java Instant和MS SQL datetimeoffset,java,sql-server,datetime,Java,Sql Server,Datetime,我正在使用spring、mybatis、mssql-jdbc-8.4.1 我有非常简单的测试代码来保存模型并从数据库中获取模型。 模型字段的类型为Instant,DB列的类型为datetimeoffset 在持久化/获取后,我的时区偏移量正好有时差。 将DB列类型更改为datetime2可以解决此问题 Q:我应该将其视为基础库问题(mybatis或jbdc驱动程序),还是错误地期望java Instant保存在UTC时区中,并以此方式获取以保持有效的“Instant” 将DB列类型更改为date
模型字段的类型为Instant,DB列的类型为datetimeoffset 在持久化/获取后,我的时区偏移量正好有时差。
将DB列类型更改为datetime2可以解决此问题 Q:我应该将其视为基础库问题(mybatis或jbdc驱动程序),还是错误地期望java Instant保存在UTC时区中,并以此方式获取以保持有效的“Instant” 将DB列类型更改为datetime2可以解决此问题
datetime2
是与ANSI SQLTIMESTAMP
类型对应的MS SQL Server类型,它映射到JDBC 4.2中的LocalDateTime
。A不包含任何时区信息,因此您将始终获得相同的值
如果要以这样一种方式存储它,即检索到的值应在具有不同偏移值的时区中自动更改,则应将其保存到类型为“TIMESTAMP with timezone
”的数据库字段中,该字段对应于OffsetDateTime
。请注意,大多数JDBC驱动程序不支持Instant
和ZonedDateTime
。此外,大多数驱动程序要求OffsetDateTime
实例的时区偏移量为+00:00
小时,因为后端将它们存储为UTC
查看更多信息
将DB列类型更改为datetime2可以解决此问题
datetime2
是与ANSI SQLTIMESTAMP
类型对应的MS SQL Server类型,它映射到JDBC 4.2中的LocalDateTime
。A不包含任何时区信息,因此您将始终获得相同的值
如果要以这样一种方式存储它,即检索到的值应在具有不同偏移值的时区中自动更改,则应将其保存到类型为“TIMESTAMP with timezone
”的数据库字段中,该字段对应于OffsetDateTime
。请注意,大多数JDBC驱动程序不支持Instant
和ZonedDateTime
。此外,大多数驱动程序要求OffsetDateTime
实例的时区偏移量为+00:00
小时,因为后端将它们存储为UTC
查看更多信息