java - 如何在最初给定的时区中存储和显示日期?

标签 java postgresql date timezone eclipselink

我有一台服务器正在从不同时区的客户端接收数据。数据提要包含人物、他们的出生日期和其他事件日期。出于我们的目的,如果我们可以将日期存储为他们提供给我们的日期,那将很方便。

例如,如果客户在加利福尼亚,它告诉我们此人的出生日期是 5 月 31 日,我们希望将其存储在数据库中,时间为太平洋时间 1999 年 5 月 31 日。这样,无论您在哪个时区,都可以看到此人出生于 5 月 31 日。

与此同时,我们希望能够查询这些数据,以便能够弄清楚诸如“此人是否未成年人”或“此事件是否发生在 24 小时前?”之类的事情?

客户端通过基于 http 的 rest API 向我们发送数据。服务器是用 Java 编写的(使用 eclipselink)。数据库是postgresql。是否有可能满足这些要求?

通常,人们会说将所有内容存储为 UTC,但我觉得这不是一个好主意,因为我们会丢失原始数据的时区。

最佳答案

UTC 是要走的路。对于timestamptz(带时区的时间戳),输入值的时区仅作为Postgres内部计算UTC的修饰符。 (对于 timestamp [without time zone],任何附加的时区都将被忽略!)。不保存时区。您需要另外保存它以了解世界上哪里发生了什么事。

如果这样做,您还不如存储本地时间戳。只是不要混淆哪个是哪个。要么将所有内容转换为 UTC(timestamptz 自动发生),要么将所有内容转换为本地时间(定义“本地”:您的本地时间?本地到数据库服务器?本地到用户?)。

特别是,存储准确的时区名称(或对它的引用)而不只是“太平洋时间”。这对于夏令时、闰秒或其他事件更为精确。

详细解释:

关于时区名称和缩写:

关于时区处理:

关于java - 如何在最初给定的时区中存储和显示日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25294648/

相关文章:

java - 这个 ANR 是什么意思?

sql - 生成 1 - 10 范围内的随机数

sql - JOIN psql 中的三个表(SQL 查询)

r - 在 R 中转换日期格式

date - 卡住的 PHP date() 显示同一天/同一时间

java - 如何在多边形内添加JLabel?

java - 为什么Spring在bean实例化失败的情况下还要继续初始化context?

java - selenium webdriver 不从 java 中的 css 选择器返回值

python-3.x - Python copy_expert 加载带有空值的数据时出现问题

php - 时间戳查询不起作用