0

データベースからタイムスタンプを取得currentTimeInMillisして減算すると、誤った値が得られます。ログを見ると、値が 197 907 ミリ秒 / 60 000 = 119.965117 分あたりに多少シフトしているように見えます。「2時間問題」のようです。

MySQL は SYSTEM タイムゾーンを使用します。

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

また、JVM への引数はタイムゾーンを指定しません (したがって、システムのタイムゾーンを取得する必要があります)。

Web サーバーと DB サーバーは同じマシンです。

この問題は、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 水 3 月 7 日 15:20:22 MSK 2012 x86_64 GNU/Linux
jdk1.6.0_33 (x64) Oracle Web サイトから取得し、手動でインストール

グラスフィッシュへのパラメータ

/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.ポリシー -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,,,開始ドメイン,,,--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/usr/lib/jvm/jdk1.6.0_33/jre/lib/amd64/サーバー:/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 --ホスト,,,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/usr/lib/jvm/jdk1.6.0_33/jre/lib/amd64/サーバー:/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 --ホスト,,,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 true0_33/lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib com.sun.enterprise.glassfish.bootstrap.ASMain -ドメイン名 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 true0_33/lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib com.sun.enterprise.glassfish.bootstrap.ASMain -ドメイン名 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--echo=false,,,--interactive=false,,,開始ドメイン,,,--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 -タイプ DAS -domaindir /home/glassfish/glassfish/domains/domain1 -read-stdin true--echo=false,,,--interactive=false,,,開始ドメイン,,,--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 -タイプ DAS -domaindir /home/glassfish/glassfish/domains/domain1 -read-stdin true
4

1 に答える 1

0

これはタイムゾーンと関係がありますか?DB が異なるタイムゾーンにあり、クライアント/サーバーが異なるタイムゾーンにあると思われます。通常は、DB を GMT タイムゾーンに維持することをお勧めします。

タイムゾーンの問題についてもっと調べてみてください。いくつかの答えが見つかるかもしれません。

于 2012-07-24T08:14:23.390 に答える