0

タイムスタンプを格納する BIGINT 列 (DT) を持つテーブル (MYTABLE) があります。これらには、ユーザーのローカルタイムゾーンも含まれていることがわかりました。これらのタイムスタンプが UNIX エポックになるように、次のデータベース アップグレードでこれらの値からタイムゾーンを削除したいと考えています。

どの SQL クエリを考慮する必要がありますか (GMT + 3 クエリの例の場合)?

UPDATE `MYTABLE` SET `DT` = `DT` - (3 * 3600000)

これでよろしいですか?

また、ミリ秒がゼロに等しい日付値に対してこの UPDATE を実行する必要があります。部分文字列に変換DTし、最後の 3 文字がゼロになるように検索する必要がありますか? 正しい方法は何ですか?

4

2 に答える 2

0

私はこのSQL文を思いつきました:

UPDATE `MYTABLE` SET `DT` = `DT` - ? WHERE substr(CAST(`DT` AS TEXT), -3) = '000'

ここ?で、ミリ秒単位のタイムゾーンを含む、Java で計算された外部変数です

これでいいのか誰か確認してください

于 2013-07-14T19:21:40.717 に答える
0

データ型が BIGINT の場合、日付値がエポック時間として既に保存されていると想定する必要があります。getTime()java.util.Date のメソッドまたは からその値を取得したと仮定するとSystem.currentTimeInMillis()、データベースにはタイムゾーン情報が含まれずjava.util.DateSystem.currentTimeInMillis()どちらもタイムゾーンに依存しないようです。

表示の問題の方が多いようで、正しいタイムゾーンで日付の値を表示するようにする必要があります。

SimpleDateFormatパラメータとして受け入れるコンストラクタのバージョンを見Localeてください。

于 2013-07-14T17:45:53.160 に答える