>我有一个表,其字段的数据类型为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 格式化日期。