mysql中的UTC日期

时间:2011-05-23 15:58:32

标签: java mysql datetime timestamp

我有一个表格,其数据类型为DATETIME。我使用java在此表中保留记录,并按照以下方式计算当前日期。

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

但是当我检查我的桌子时,它再次将此时间转换为当地时区。

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

@code

我有一个db实体'Referral'对应于表,日期成员数据类型为java.util.Date,并使用hibernate保存它。

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

由于

Jitendra

2 个答案:

答案 0 :(得分:2)

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

您如何理解该信息取决于您和您的应用程序。 如果您将其存储为UTC,那么当您检索它时,您必须确保将其解释为UTC。

您可能对此问题感兴趣:How can I get the current date and time in UTC or GMT in Java?

如该问题的答案所述:

  

java中的java.util.Date总是 。   是什么让你觉得它在当地   时间?我怀疑问题是这样的   你是通过实例显示它   日历使用本地   时区,或可能使用   Date.toString()也使用了   当地时区。

答案 1 :(得分:2)

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

某些数据库(如Oracle和PostgreSQL)的数据类型为TIMESTAMP WITH TIMEZONE。我不相信MySQL有它。您可以将JVM时区切换为UTC或使用字符串字段,并使用SimpleDateFormat格式化Date。