在 mysql 中以 UTC 为单位的日期



>我有一个表,其字段的数据类型为DATETIME。我使用 java 在此表中保留一条记录,并按如下方式计算当前日期。

Date date = Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime();

但是当我检查我的表时,它再次将这个时间转换为本地时区。

有人可以向我解释一下,如何在数据库中以UTC时区存储日期。

@Code

我有一个数据库实体"引用"对应于日期成员数据类型为 java.util.Date 的表,并使用休眠来保存它。

Referral ref = new Referral();
ref.setCreationDate(Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime());
referralDAO.save(ref);

谢谢

吉滕德拉

MySql DATETIME以与时区无关的方式存储。它只存储年/月/日/小时/分钟/秒

如何解释这些信息取决于您和您的应用程序。如果将其存储为 UTC,则在检索它时,必须确保也将其解释为 UTC。

您可能对这个 SO 问题感兴趣:如何在 Java 中以 UTC 或 GMT 格式获取当前日期和时间?

正如对该问题的回答中提到的:

java.util.Date 始终采用 UTC。 是什么让你认为它是本地的 时间?我怀疑问题是 您正在通过实例显示它 使用本地的日历 时区,或可能使用 Date.toString() 也使用 本地时区。

Java 中的日期很长。它与任何时区无关。当您通过 JDBC 驱动程序将日期/时间戳传递给数据库时,它会将其解释为会话时区(即您的 JVM 时区)中的时间。

一些数据库,如Oracle和PostgreSQL,数据类型为TIMESTAMP和TIMEZONE。我不相信MySQL有它。您可以将 JVM 时区切换到 UTC,也可以使用字符串字段并使用 SimpleDateFormat 格式化日期。

相关内容

  • 没有找到相关文章

最新更新