3
4

4 に答える 4

5

この問題をさらに調査しました。現在、GORM では日付/時刻型をサポートしていません。timestamp with time zone

dialect_postgres.goのコードのこの部分を参照してください。

case reflect.Struct:
   if _, ok := dataValue.Interface().(time.Time); ok {
      sqlType = "timestamp with time zone"
}

したがって、基本的には次の 2 つのオプションがあります。

varchar(10)DBで使用しstring、Goで使用する場合は、単に「9:00 PM」として保存します(10はあなたに合った数字です)

またはtimestamp with time zone、DB やtime.TimeGo で使用し、日付部分を一定の日付 (1970 年 1 月 1 日) としてフォーマットします。次に例を示します。

time.Parse("2006-01-02 3:04PM", "1970-01-01 9:00PM")

その場合、プレゼンテーションで日付の部分を省略する必要がありますが、日付範囲で選択する場合は、そのほうがうまくいく可能性があります。

于 2016-09-15T20:05:48.613 に答える
0

Postgres の観点から見ると、エラーは 0000 年が存在しないことに起因します。有効な Postgres タイムスタンプ。

select '0000-01-01T21:00:00+00'::timestamptz at time zone 'UTC' 
ERROR:  date/time field value out of range: "0000-01-01T21:00:00+00"

彼に同じエラーを与えます。そして、0001-01-01 の 1 日前のデモンストレーションと同じように:

select '0001-01-01T21:00:00+00'::timestamptz at time zone 'UTC' - interval '1 day' "day_before_1/1/1";
--day_before_1/1/1
--0001-12-31 21:00:00 BC
于 2019-08-13T03:39:18.997 に答える