gpt4 book ai didi

java - 为什么从 MySQL 数据库存储和检索的时间戳在 System.currentTimeMillis 中查找 "shifted"?

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:00 25 4
gpt4 key购买 nike

当我使用 currentTimeInMillis 并从数据库中减去它时,我得到了不正确的值。查看日志后,这些值似乎在 197 907 毫秒/60 000 = 119.965117 分钟左右发生了一些变化。看起来像“两小时问题”。

MySQL 使用系统时区:

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+

JVM 没有任何参数指定时区(因此它将选择系统时区)。

网络服务器和数据库服务器是同一台机器。

这个问题只能在使用 Virtuozzo 的生产服务器上重现(根本不重要),而不能在我的本地主机上重现,它可以在使用 Java6 和 Java7 的生产服务器上重现。

日期通过 JDBC 插入数据库:

cityItemInsertStmt.setDate(3, new Date(System.currentTimeMillis());

并使用纯 JDBC 读取:

cityItemEntry.setVoteDate(rs.getDate("vote_date"));

有关系统的更多信息:

Ubuntu 10.04.4 LTS 2.6.18-028stab099.3 #1 SMP Wed Mar 7 15:20:22 MSK 2012 x86_64 GNU/Linuxjdk1.6.0_33 (x64) taken from Oracle website and installed manually

glassfish 的参数

/usr/lib/jvm/jdk1.6.0_33/bin/java -cp /home/glassfish/glassfish/modules/glassfish.jar -XX:+UnlockDiagnosticVMOptions -XX:PermSize=64m -XX:MaxPermSize=192m -XX:NewRatio=2 -Xmx2048m -Xms1024m -server -javaagent:/home/glassfish/glassfish/lib/monitor/flashlight-agent.jar -Dfelix.fileinstall.disableConfigSave=false -Dproduct.name -Djavax.net.ssl.keyStore=/home/glassfish/glassfish/domains/domain1/config/keystore.jks -Djava.awt.headless=true -Dfelix.fileinstall.poll=5000 -Djava.endorsed.dirs=/home/glassfish/glassfish/modules/endorsed:/home/glassfish/glassfish/lib/endorsed -Dfelix.fileinstall.bundles.startTransient=true -Djavax.net.ssl.trustStore=/home/glassfish/glassfish/domains/domain1/config/cacerts.jks -Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as -DANTLR_USE_DIRECT_CLASS_LOADING=true -Djava.security.auth.login.config=/home/glassfish/glassfish/domains/domain1/config/login.conf -Dgosh.args=--nointeractive -Dosgi.shell.telnet.maxconn=1 -Djdbc.drivers=org.apache.derby.jdbc.ClientDriver -Dfelix.fileinstall.dir=/home/glassfish/glassfish/modules/autostart/ -Dosgi.shell.telnet.port=6666 -Djava.security.policy=/home/glassfish/glassfish/domains/domain1/config/server.policy -Dfelix.fileinstall.log.level=2 -Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory -Dosgi.shell.telnet.ip=127.0.0.1 -Dcom.sun.aas.instanceRoot=/home/glassfish/glassfish/domains/domain1 -Dcom.sun.aas.installRoot=/home/glassfish/glassfish -Djava.ext.dirs=/usr/lib/jvm/jdk1.6.0_33/lib/ext:/usr/lib/jvm/jdk1.6.0_33/jre/lib/ext:/home/glassfish/glassfish/domains/domain1/lib/ext -Dfelix.fileinstall.bundles.new.start=true -Djava.library.path=/home/glassfish/glassfish/lib:/usr/lib/jvm/jdk1.6.0_33/jre/lib/amd64/server:/usr/lib/jvm/jdk1.6.0_33/jre/lib/amd64:/usr/lib/jvm/jdk1.6.0_33/lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib com.sun.enterprise.glassfish.bootstrap.ASMain -domainname domain1 -asadmin-args --host,,,localhost,,,--port,,,4848,,,--secure=false,,,--terse=false,,,--echo=false,,,--interactive=false,,,start-domain,,,--verbose=false,,,--debug=false,,,--domaindir,,,/home/glassfish/glassfish/domains,,,domain1 -instancename server -verbose false -debug false -asadmin-classpath /home/glassfish/glassfish/modules/admin-cli.jar -asadmin-classname com.sun.enterprise.admin.cli.AsadminMain -upgrade false -type DAS -domaindir /home/glassfish/glassfish/domains/domain1 -read-stdin true

最佳答案

这与时区有关吗?我怀疑您的数据库位于不同的时区,并且您的客户端/服务器位于不同的时区。我认为通常的偏好是将数据库保留在 GMT 时区。

尝试查找更多有关时区问题的信息,您可能会找到一些答案。

关于java - 为什么从 MySQL 数据库存储和检索的时间戳在 System.currentTimeMillis 中查找 "shifted"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11559511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com