我的 J2EE 应用程序部署在集群中,服务器可以位于多个时区。例如,一台服务器在 EST 中,另一台服务器在 CST 中。
考虑这样一个场景,请求以美国东部标准时间发送到服务器并将日期和时间存储在数据库中(没有时区)。还有另一个检索相同日期的请求。但该请求可能会转到 CST 中的另一台服务器。
有什么方法可以确定数据库中存储的是哪个时区日期?
PS:我正在使用 Oracle/Java/Hibernate。
最佳答案
没有。如果您存储没有时区的 DATE
,则无法查询时区。
作为开发者,您需要决定如何处理时区。请记住,您有 3 个时区:
- 数据库服务器时区。
- Web 应用程序服务器时区。
- 客户端浏览器时区。
如果洛杉矶的用户输入时间,巴黎的用户应该看到什么?
如果悉尼的用户执行操作,多伦多的用户应该看到什么操作时间戳?
在您可以回答这些问题之前,即定义您的需求,解决方案/实现是不可能编码/验证的。
如评论中所述,基本上有两种处理时区的方法:
- 将所有日期存储在固定时区中,例如UTC,并在需要的地方进行转换,这几乎无处不在。
- 存储带时区的日期,并根据需要转换或显示时区。用户可能更喜欢转化,但这是您做出的设计决定。
关于java - 检索存储在数据库中的日期的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33313991/