【发布时间】:2014-07-11 17:11:27
【问题描述】:
对于我的数据库中基于事件的列,例如 createdDate,我想存储一个 UTC 值。
如果我目前正在做的事情能正确解决我的问题,我正在寻求建议。
- 在 postgresql 中,我将使用没有时区列的时间戳
-
在我的 scala(类似于 java)代码中,我将生成一个时间戳,例如:
val currentMs: Long = System.currentTimeMillis new java.sql.Timestamp(currentMs) 我会将该值保存到数据库中。我所有的服务器时间都将同步。 现在在数据库级别,我存储的是纯 UTC 值。
当我从数据库中检索数据时,我将使用Joda-Time 从数据库中获取时间戳值,然后将该值转换为特定时区。
这是执行 UTC 的正确方法吗? 我是否在这里遗漏了一些东西,因为当您在谷歌上搜索时,这个主题令人困惑:)
注意:这是一个全新的项目,因此我可以毫无问题地进行更改。
更新
在步骤#2 中,如果我只是将原始 currentMs 值存储在一个长列中,而不是存储来自 java.sql.Timestamp 的值,该怎么办。然后在 UI 中,我会根据登录的用户将 unix 时间转换为特定的时区。
这样合适吗?
【问题讨论】:
-
我对 Scala 或您提到的 Jodatime 一无所知。但是,对于 PostgreSQL,使用“带时区的时间戳”并在存储时间戳时提供时区。这将存储一个绝对时间戳。然后,在检索时只需指定您的客户端时区(或使用
AT TIME ZONE t)。不知道这一切将如何与您的框架层一起使用。 -
@RichardHuxton 为什么我要在 postgresql 中指定时区,我不只需要原始 utc/unix 时间吗?我不明白。
-
timestamp without time zone与 UTC 时间不相同。它是一个被解释为“本地时间”的值。含义取决于您当前的时区设置(并随其变化)。这个相关的答案可能会有所帮助:stackoverflow.com/questions/9571392/… -
@RichardHuxton JodaTime 将变得非常重要 - 它是新的日期/时间 API 的基础,最终被引入 Java 以取代
java.util.Date的古老恐怖和不太好 @987654327 @类。 -
我强烈建议在数据库中使用
timestamp with time zone,尤其是在您存储 UTC 瞬间时。否则听起来不错。
标签: java postgresql scala jodatime utc