JDBCを介してデータベースを操作する場合はどのように夏時間を処理していますか?

周:

私のMySQLサーバは、UTC(デフォルト時間帯=のmy.cnfで「00:00」)を使用するように設定し、私は、データソースのURLに「serverTimezone = UTC」が追加されます。

私が理解したように、これは2つのことを意味します。

  1. MySQLサーバに格納UTCゾーンの任意の日付/時刻データ。
  2. JDBCはそれを知っています。

私はLocalDateTimeをフィールドといくつかのダオクラスがあるとします。

class MyDataDao {
    public LocalDateTime theDate = LocalDateTime.parse("2020-01-10T10:00:00");
    // some other fields ...
}

そして私は、データベースにMyDataDaoを挿入します:

m_jdbc.update(new PreparedStatementCreator() {
    @Override
    public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
        PreparedStatement ps = connection.prepareStatement(SQL_ADDMYDATA, Statement.RETURN_GENERATED_KEYS);
        //... some other fields ...

        // the date time field
        ps.setObject(3, myData.getTheDate());
        return ps;
    }
}, genKey);

今ここに質問に来ること:

私はそれが「2020年1月10日だった、CLIでデータベースを照会午前9時00分00秒」。

私の「標準」タイムゾーン「はUTC + 1」であるので、私は、中央ヨーロッパでいます。JDBCは、自動的に「UTC」に「UTC + 1」から「theDate」を調整するように思われました。

しかし、私はそれが今夏時間である知っているので、実用的な時間帯は、実際には「UTC + 2」です。残念ながら、JDBCは、このことを考慮していませんでした。

質問は以下のとおりです。

  1. すべての私の理解は正しいの上ですか?
  2. どのように私は、JDBCは、アカウントにDSTを取ることができますか?

(私は...(は、TimeZone.setRawOffsetを試してみました)が、それは助けませんでした。私は手動でJDBCに送信する前に、「theDate」フィールドをシフトすることができます知っているが、私はそれは間違いなくベストプラクティスではありません推測します)

ありがとうございました!

NAIT:

、それは一例で、常に簡単です実際に適用される時間帯は、あなたの日付ではなく、現在のDayight省上にrefred現時点で使用さ夏時間に依存常にます。

のは、私は値を含む列の作成日と私のデータベース内の文書を作成したとしましょう01/01/2019-12:00:00 UTC

  • とき私は、クエリ文書2019年2月2日(この時点ではパリでオフセット使用するタイムゾーンはUTC + 1である)、返される文書は次の値があります「01/01/2019から13:00:00のパリ」 。
  • 私は同じ文書を照会する場合01/08/2019:00:00パリ(パリのオフセット使用するタイムゾーンはUTC + 2である。この時点で)、その後も、01/01/2019から13を返します。

だから、オフセット適用されたタイムゾーンは、タイムゾーンに依存し、夏時間は、あなたの日付オブジェクトによって参照さ瞬間を適用します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=331401&siteId=1