問題
エラーが発生した時に、Javaプログラムでは、フロントページの表示には、データベース内の時間表示時間と矛盾をデータベースバックエンドの時間を読み込みます。
以下のようなツールを使用し、そのバージョン
- MySQLデータベースのバージョン:8.0.15 OSX 10.14のために
- タイムデータベースの種類:dateTimeの
- JDKのバージョン:11.0.2
- MySQLのドライブ:mysqlのコネクタ-javaの8.0.16
- データソース:com.alibaba.druid 1.1.19
- Javaプロジェクト、時間タイプ:ジョダ-時間のDateTimeの2.10.2
調査とその理由
ほとんどが原因のトラブルシューティングを開始し、フロントエンドでの時間を表示するために、私は文字列に変換するには、時間外のデータベースを読み込みますので、誤差が時刻形式のDateTimeに変換し、その後、読み出し時間後にデータベースから変換されていません。テストを開始します:
1日時今= DateTime.now()。
2 のSystem.out.println(今)。
3
4列nowStr = now.toString(DateTimeFormat.forPattern( "YYYY-MM-DD HH:MM:SS" ));
5のSystem.out.println(nowStr)。
出力は次のようになります。
1 2019-09-03T11:15:23.749 + 08:00
2 2019年9月3日午前11時15分23秒
北京東の8つの地区を代表する、:「00 08」のDateTimeは、出力時刻形式はかなり標準である、プラスの後ろに見ることができます。文字列の表示に正しいです。
データベースに端末に、データベースが正しいトラブルシューティングするために、次のステップを読み、同じデータベースは、時間を発見し、端末が時間を読み出します。
プロジェクトコードのみがデータベースから間違ったデータを読み取ることができるようです。情報を繰り返し改訂された観測プログラムの時間情報を読み出す時間は、私がプログラムを読み出したデータベースのタイム種類以上の13時間を記述しています。完全な13時間。これはなぜさえ8時間またはそれの15時間、13時間、なぜあるべきであるGMTの差が、あります。西5区であり、それを行うには時間が計算しますか?
その後で、インターネット上の最後を検索この記事答えを見つけるために。私はUTC-5でのデータベースから読み込まUTC-5標準として、私たちは北京東UTC + 5の8つの地区を使用し、:理由は、とき米国中部標準時にCST時間のJavaとMySQLのMySQLの相談時間帯ということですJavaでプログラムする時は、自動的に+ 8時間、時間のも、13時間以上のデータベースUTCに変換します。
ソリューション
データベースは、タイムゾーンが接続文字列に設けられているコンフィギュレーションファイルに:
1 spring.datasource.url = JDBCます。mysql:// 127.0.0.1:3306/yourDB?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8。
プログラムは、データベースから読み込んで、この時間は、時間東8つの地区のデフォルトの時間ではなく、データベースの西五回の使用で使用されています。