MyBatis TypeHandlerクラスを使用するJavaアプリケーションがあります。 MySqlデータベースに保存されている日付がMST時間であることを確認する必要があります。UTC JodaTime.DateTimeオブジェクトを別のタイムゾーンのタイムスタンプに変換する
もう1つ MSTにあるデータベースから日付を取得し、それをUTCに変換するTypeHandler。したがって、たとえば、データベースにタイムスタンプがいた場合:
2016-05-05 00:01:00
日はアプリ側で表示されたとき、それは次の形式(UTC)である:
2016-05-05T07:01:00.000Z
アプリ側がすべて行います残念ながら、MySqlサーバーはMSTに保存する必要があります。
アプリケーションが実行されているサーバー(MST、PST、ESTで実行されているサーバー)の日付を一致させるために、2つのTypeHandlerが必要です.1つは、アプリケーションに入る日付とマーシャリングするそれがMSTに戻っていることを確認してください。
UtcToMstDateTimeTypeHanlderのsetParameterを使用する方法:
@Override
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException
{
if (parameter != null)
{
//1. 2016-05-05 00:01:00 (timestamp) converted to UTC DateTime -> 2016-05-05T07:01:00.000Z
DateTime thisDateTime = (DateTime) parameter;
//2. UTC DateTime converted to LocalDateTime -> 2016-05-05T07:01:00.000
LocalDateTime thisLocalDateTime = thisDateTime.toLocalDateTime();
//3. LocalDateTime to MST DateTime -> 2016-05-05T07:01:00.000-07:00
DateTime mstTime = thisLocalDateTime.toDateTime(DateTimeZone.forID("MST"));
//4. But TimeStamp adds 3 hours... Why? 2016-05-05 10:01:00.0
Timestamp mstTimeStamp = new Timestamp((mstTime).getMillis());
ps.setTimestamp(i, mstTimeStamp);
}
else
{
ps.setTimestamp(i, null);
}
}
タイムスタンプが3時間進んUTCのされて終わる:
2016-05-05 10:01:00.0
それだけでなく、それはまた、MSTよりUTCより相対的なものですただし、現在はUTCより+10:01時間遅れています。
所望の効果がTypeHandlerは以下のタイムスタンプとしてバックデータベースに日付を書き込むことです。
2016-05-05 00:01:00.0
Iは、単に日付バックデータベース(上記タイムスタンプ)にするために提供したいと思いそれが出て来たものと同じである。
現在、私は米国の東海岸(EST)でこれを実行しています。