カスタムの Hibernate 日付型を使用します。クエリにパラメーターを設定するときはいつでも、基本クラスまたはユーティリティ メソッドを使用して、ユーザーのタイムゾーンをカスタム型パラメーターに渡すことができます。
クエリのユーティリティ メソッドで時刻を手動で調整するだけで済みますが、この方法では、データベースに読み書きされる日付も正しく変換されます。このメソッドは、データベースが日付をローカル タイム ゾーンで格納する状況にも対応します。したがって、ユーザーが 1 つのタイム ゾーンにいて、データベース サーバーが別のタイム ゾーンにあり、Java が GMT を使用している場合でも、すべてを正しく処理できます。最終的には次のようになります。
Properties properties = new Properties();
properties.setProperty("timeZone", databaseTimeZone);
query.setParameter("from", dateEnteredByUser, Hibernate.custom(LocalizedDateType.class, properties));
おまけとして、これを使用して、SQL Server が 23:59:59.999 を翌日に変換するという事実に対処します。カスタムタイプでは、それをチェックして元に戻します。