Java mysql中的UTC日期
我有一个表,其中包含数据类型为DATETIME的字段。我使用java在这个表中保存了一条记录,并按如下方式计算当前日期Java mysql中的UTC日期,java,mysql,datetime,timestamp,Java,Mysql,Datetime,Timestamp,我有一个表,其中包含数据类型为DATETIME的字段。我使用java在这个表中保存了一条记录,并按如下方式计算当前日期 Date date = Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime(); 但当我检查我的表时,它再次将这个时间转换为本地时区 有人能给我解释一下,如何在数据库中存储UTC时区中的日期吗 @代码 我有一个db实体“Referral”,对应于日期成员数据类型为java.util.date的表,并使用hiber
Date date = Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime();
但当我检查我的表时,它再次将这个时间转换为本地时区
有人能给我解释一下,如何在数据库中存储UTC时区中的日期吗
@代码
我有一个db实体“Referral”,对应于日期成员数据类型为java.util.date的表,并使用hibernate保存它
Referral ref = new Referral();
ref.setCreationDate(Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime());
referralDAO.save(ref);
谢谢
JitendraMySql DATETIME以时区不可知的方式存储。它只存储年/月/日/小时/分钟/秒 如何解释这些信息取决于您和您的应用程序。 如果将其存储为UTC,则在检索时必须确保将其解释为UTC 您可能对这个问题感兴趣: 如对该问题的答复所述: java.util.Date始终以UTC为单位。 你凭什么认为它是本地的 时间我怀疑问题在于 您正在通过一个实例显示它 使用本地 时区,或者可能使用 Date.toString,它还使用 当地时区
Java中的日期只是一个很长的过程。它对任何时区都是不可知的。当您通过JDBC驱动程序将日期/时间戳传递给数据库时,它将其解释为会话时区(JVM时区)中的时间
有些数据库,如Oracle和PostgreSQL,具有带时区的数据类型时间戳。我认为MySQL没有。您可以将JVM时区切换为UTC,也可以使用字符串字段并使用SimpleDataFormat格式化日期。向我们展示检索和解释日期时间的代码,这可能是出错的地方。数据库连接属性与此有关吗?在您的代码中,调用calendarInstance.getTime时,您所做的所有时区工作都将丢失。两个问题:1。您确定没有存储正确的值吗?尝试更改您机器的时区。如果结果显示在新时区中,则表明您的数据是正确的,这只是一个显示问题。2.您的数据库模式是什么?您使用的是日期时间还是时间戳?请看,我在mysql中使用的是DateTime。我正在使用mysql客户端直接检查数据库记录。@dilium,在您的代码中,当您调用calendarInstance.getTime时,您所做的所有时区工作都丢失了。那么我们如何以UTC为单位保留时间呢?我正在尝试以UTC为单位存储时间,但它正在以本地时区为单位存储。请参阅@Dilum Ranatunga的注释-您确定它没有存储在UTC中吗,还是仅仅是演讲?尝试从mysql的命令行界面中进行选择,以删除reinterpretation@Jitendra-如我在对主要问题的评论中所述,您是否研究过转介?