15

私たちは独自のストリーム ゲージを展開しています (この USGS ゲージによく似ています: http://waterdata.usgs.gov/usa/nwis/uv?site_no=03539600 ) 。そこを運転するために時間とガスを無駄にしないでください。東部と中央のタイムゾーンにまたがる南東部の急流地域にこれらのいくつかをインストールしたいと考えています.

レコードの current_time のデフォルト値を使用して、レコードが挿入された時刻を保存しています。MM/DD/YYYY HH12:MI AM TZのような読みを出力する形式を使用して、後でデータを表示したいと思い03/12/2012 01:00 AM CDTます。また、出力で夏時間の変更を認識できるようにしたいので、前の文の最後の部分は、「スプリング フォワード」と「フォール バック」時に CST と CDT の間で変化します。この変更は今年 2012 年 3 月 11 日に行われました。以下の DST 行の両側に日付を含めました。私は開発用に Windows 7 ラップトップを使用しており、後で Unix ボックスにデプロイする予定です。Postgres は、私の Windows コンピューターが米国東部のタイム ゾーンに設定されていることを検出したようです。「タイムゾーンなしのタイムスタンプ」フィールドと「タイムゾーン付きのタイムスタンプ」でこれを試しています

選択で「タイムゾーンで」を使用してみましたが、タイムゾーンを表示する時間になるまですべてが機能しています。実際の時間はタイム スタンプの一部であり、CDT で時間を尋ねると 1 時間が正しく減算されます。ただし、出力には EDT が表示されます。

SELECT reading_time as raw,
       reading_time at time zone 'CDT',
       to_char(reading_time at time zone 'CDT',
           'MM/DD/YYYY HH12:MI AM TZ') as formatted_time
  FROM readings2;

"2012-04-29 17:59:35.65";"2012-04-29 18:59:35.65-04";"04/29/2012 06:59 PM EDT"
"2012-04-29 17:59:40.19";"2012-04-29 18:59:40.19-04";"04/29/2012 06:59 PM EDT"
"2012-03-10 00:00:00";"2012-03-10 00:00:00-05";"03/10/2012 12:00 AM EST"
"2012-03-11 00:00:00";"2012-03-11 00:00:00-05";"03/11/2012 12:00 AM EST"
"2012-03-12 00:00:00";"2012-03-12 01:00:00-04";"03/12/2012 01:00 AM EDT"

各ゲージが異なる文字フィールドにあるタイムゾーンを別のテーブルに保存しています。この値を時間出力の最後に追加することだけを検討しましたが、介入なしで CST から CDT に変更したいと考えています。

ご協力いただきありがとうございます。

4

3 に答える 3

49

CDT や CST などのタイム ゾーン名を使用する代わりに、完全な Olsen スタイルのタイム ゾーン名を使用することを検討できます。中部時間の場合、タイムゾーンを選択できます。America/Chicago、または単になど、現在地に一致するものUS/Central。これにより、PostgreSQL は Olsen tz データベースを使用して、特定の日付に夏時間が適用されるかどうかを自動的に判断します。

于 2012-04-30T15:09:49.003 に答える
8

必ず列が必要です( PostgreSQL ではTIMESTAMP WITH TIME ZONE列とも呼ばれます)。timestamptzこれにより、タイムスタンプが UTC で保存されるため、特定の時点を表すことができます。名前が示唆するものとは反対に、列にタイム ゾーンを保存しませAT TIME ZONE。取得したタイムスタンプをフレーズで選択したタイム ゾーンで表示できます。

TIMESTAMP WITHOUT TIME ZONE のセマンティクスは紛らわしく、ほとんど役に立ちません。あなたが説明していることには、そのタイプをまったく使用しないことを強くお勧めします。

タイムスタンプを列に保存することについて話している質問の部分に本当に混乱していCHARACTER VARYINGます。それは問題の一部であるかのようです。最初から収納できればtimestamptzトラブルは少ないと思います。それを除けば、UTC からのオフセットには -04 表記を使用するのが最も安全です。しかし、それは私には何の役にも立たない仕事のように思えます。

于 2012-04-30T12:43:55.683 に答える
1

Guan Yang's answerで提案されている形式で既知のタイムゾーンのテーブルを作成し、このテーブルに外部キー列を使用できます。有効なタイムゾーンは、この関連する回答pg_timezone_namesで詳細を説明したから取得できます。

于 2015-03-07T01:15:56.030 に答える