java - 检索存储在数据库中的日期的时区

标签 java oracle hibernate date timezone

我的 J2EE 应用程序部署在集群中,服务器可以位于多个时区。例如,一台服务器在 EST 中,另一台服务器在 CST 中。

考虑这样一个场景,请求以美国东部标准时间发送到服务器并将日期和时间存储在数据库中(没有时区)。还有另一个检索相同日期的请求。但该请求可能会转到 CST 中的另一台服务器。

有什么方法可以确定数据库中存储的是哪个时区日期?

PS:我正在使用 Oracle/Java/Hibernate。

最佳答案

没有。如果您存储没有时区的 DATE,则无法查询时区。

作为开发者,您需要决定如何处理时区。请记住,您有 3 个时区:

  • 数据库服务器时区。
  • Web 应用程序服务器时区。
  • 客户端浏览器时区。

如果洛杉矶的用户输入时间,巴黎的用户应该看到什么?

如果悉尼的用户执行操作,多伦多的用户应该看到什么操作时间戳?

在您可以回答这些问题之前,即定义您的需求,解决方案/实现是不可能编码/验证的。

如评论中所述,基本上有两种处理时区的方法:

  1. 将所有日期存储在固定时区中,例如UTC,并在需要的地方进行转换,这几乎无处不在。
  2. 存储带时区的日期,并根据需要转换或显示时区。用户可能更喜欢转化,但这是您做出的设计决定。

关于java - 检索存储在数据库中的日期的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33313991/

相关文章:

java - ORA-01795 : maximum number of expressions in a list is 1000 error with myibatis

spring - 如何为连接表中的其他属性创建多对多 Hibernate 映射?

spring - 如何使用 hibernate 过滤器或其他方式在 spring 数据 jpa 中实现行级安全?

java - 无法在 Android 2.1 上加载静态文件

java - 仅当 JNDI 资源可用时才在 JBoss 上部署 WAR 文件

java - Android - 使用 Handler 和 postDelayed 定期运行方法

java - Hibernate System.err 控制台日志记录

java - Android ComputableFuture 无法与 Firestore 配合使用

regex - oracle中包含数字和句点的正则表达式

sql - 使用动态创建的字符串向用户授予角色