Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mysql中的UTC日期_Java_Mysql_Datetime_Timestamp - Fatal编程技术网

Java mysql中的UTC日期

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

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

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);
谢谢


Jitendra

MySql 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-如我在对主要问题的评论中所述,您是否研究过转介?