请求验证数据库和Java如何存储和处理时区?
对于这个极其基本的问题,我深表歉意,我想我知道答案,但我想核实一下:
当提到时区以及它们通常如何存储在数据库和java中时。util。日期:
- 在数据库中保存日期字段时,它与时区无关(例如,总是以UTC格式保存)
- 当使用Java日期对象时,日期也是时区不可知的
- 仅当格式化和解析日期(DB和Java)时,时区才受影响
- 如果使用Java,它将使用JVM用户。设置/分析日期的时区
- 如果在Windows上使用Java,Java将自动从区域设置中获取此信息
- 数据库时区(及其机器的时区)与Java JDBC客户机无关
- 数据库服务器的时区仅与直接SQL解析和格式化相关
我的问题是:
- 以上所有假设都正确吗?有些是?都是不诚实的吗李>
- 是否有参考/官方来源可以更“正式”地验证这一点李>
# 1 楼答案
对于Java来说,这种假设基本上是正确的。对于数据库来说,它们不一定是正确的,因为存在一些变化
Java使用日历对象处理时区。爪哇。util。日期对象始终包含UTC值
数据库通常在写入日期和时间戳时存储和返回日期和时间戳(带有小时、分钟等),而不考虑存储所使用的内部格式。如果存储2010-12-25,则无论客户端或服务器的时区如何,都将检索相同的值
有些数据库具有TIMESTAMP WITH TIMEZONE数据类型,它分别存储时间戳和时区
日期和时间戳在Java和数据库之间转换,通常以Java子类。util。使用的日期在JDBC客户端的时区中进行解释