21

postgres dbで動作するRailsアプリケーションがあります。from_time と to_time の 2 つのフィールドがある UserTimings というモデルがあります。

t.time     "from_time"
t.time     "to_time"

時刻は、タイムゾーン情報を含む完全な UTC 形式で保存されることを期待していました。しばらくして、データベースにテーブルを作成するためのこの種の SQL クエリがあることに気付きました。

from_time time without time zone,
to_time time without time zone,

これいらない。タイムゾーンで保存したい。Railsアプリケーションがそれを処理するように構成されていますが、UTC時間で+0530が必要です。データベースにタイムゾーンを強制的に使用させる移行の書き方を教えてください。

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

4

3 に答える 3

23

その移行はまさにあなたが望むことを行います

class CreatePeppers < ActiveRecord::Migration
  def change
    create_table :peppers do |t|
      t.column :runs, 'timestamp with time zone'
      t.column :stops, 'time with time zone'
    end
  end
end

種類はお好みで。ここには、postgresql がサポートする任意の型を記述できます。しかし、レールが理解できる型への変換には問題があるかもしれません。

于 2014-02-20T19:49:29.753 に答える
5

あなたはここで 2 つの別々のことについて混乱しているようです。どちらもよくある間違いで、ほとんどの人が少なくとも 1 つを犯します。

まず、「タイムゾーン情報を含むUTC形式」は時間を指定していません。時間と場所を指定しています。

次に、PostgreSQL の「タイム ゾーン付きタイムスタンプ」は、実際にはタイム ゾーンを格納しません。UTC タイムスタンプを保存しますが、タイム ゾーンを受け入れます。名前のより良い選択は、「絶対時間」のようなものです。これらの値の 2 つを直接比較できます。

タイムゾーンのないタイムスタンプは、場所も持っていない限り、実際には時間を提供しません。それぞれがどのタイムゾーンに属しているかを知らなければ、これらの 2 つを比較することはできません。

タイムゾーンのないタイムスタンプと別のタイムゾーン必要なようです。そうすれば、「火曜日の午後 2 時、ロンドン時間」と言うことができます。

于 2013-10-06T14:34:22.000 に答える