当我从数据库中取出currentTimeInMillis
并从时间戳中减去它时,我获得了不正确的值。在查看日志之后,看起来值已经在197 907 ms / 60 000 = 119.965117分钟左右移动了一些。
看起来像两个小时的问题"。
MySQL使用SYSTEM时区:
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
JVM没有参数指定时区(所以它应该拾取系统时区)。
网络服务器和数据库服务器是同一台机器。
这个问题只能在使用Virtuozzo的生产服务器上重现(根本不重要),而不能在我的localhost上重现,它可以在生产服务器上使用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/Linux jdk1.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
答案 0 :(得分:0)
这与时区有关吗?我怀疑你的数据库处于不同的时区,你的客户端/服务器处于不同的时区。我认为通常的偏好是将数据库保持在GMT时区。
尝试在时区问题上找到更多信息,您可以找到一些答案。