0

DATETIME1つの列がタイプであり、値をISTに格納するMySQLデータベースがあります(サーバーのタイムゾーンはIST)。

ESTデータベースの日付部分をその列と一致させる必要があるユーザーから2つの文字列を取得しています。

私はこのクエリを使用しています:

SELECT * FROM my_table where date(convert_tz(`myDate`,'+05:30','-05:00'))
between  '2012-12-01' and '2012-12-02';

注:データベースmysql.time_zoneが空であるということは、Javaでクエリをフレーミングするため、 strings likeGMT etc in my query, they instructed me to download a package, but I don't want to download it, its fine for me to use00:05`を使用できないことを意味します。

タイムゾーンオフセット(の)をハードコーディングしたので、このクエリは正常に実行されESTます。

しかし、このクエリでは、日中のタイミングに該当する日付、つまりのデータが間違って表示されるのではないかと心配していますEDT

では、Javaでクエリ文字列を作成するときに直接使用できるように、タイムゾーンの差を取得するにはどうすればよいですか(ESTの場合は「-05:00」、EDTの場合は「-04:00」を返す必要があります)。

私のクエリ文字列は次のようになります:

SELECT * FROM my_table where date(convert_tz(`myDate`,'+05:30','???')) 
between '2012-12-01' and '2012-12-02';

???の値が必要な場所 プリペアドステートメントを使用して動的に割り当てられます。

私はJodaTimeAPIを使用していますが、特定のタイムゾーン文字列のタイムゾーンオフサーを返すことができるものがあるかどうかについてはあまり知識がありません。

4

1 に答える 1

2

私はそれを提案します:

  • 正気のために、UTCとして値の保存を開始します。(データはサーバーの場所に依存しないようにする必要があります。)
  • Java内の開始点/終了点のUTC値を計算します(DateTime適切なタイムゾーンのセットを使用してから、UTCに変換します)
  • UTC開始/終了をSQLパラメータ( SQLテキストに値を含めない)を介してクエリに直接渡し、データベースが変換を行わないようにします

本当に、代わりにUTCを使用するようにデータベースを変更できない場合は、代わりに「ターゲットタイムゾーン」値をIST値に変換し、それらをデータベースに渡す必要があります。繰り返しますが、クエリは変換を行う必要はありません。代わりに、事前に入力を変換してください。

于 2012-12-14T13:15:15.750 に答える