すべてのプロダクト
Search
ドキュメントセンター

Hologres:タイムゾーン

最終更新日:Jan 11, 2025

世界中の国と地域は、経度と現地時間に基づいて異なるタイムゾーンに分類されます。このトピックでは、Hologres のタイムゾーンに関連するシステムパラメータについて説明します。

背景情報

異なる地域での時間を測定するために、世界は 24 のタイムゾーンに分割されています。そのうち 12 は東半球にあり、残りの 12 は西半球にあります。すべてのタイムゾーンは、グリニッジ標準時 (GMT) からのオフセットに基づいて定義されます。GMT は、英国グリニッジの王立天文台の時間です。東半球のタイムゾーンはプラス記号 (+) のオフセットで表され、西半球のタイムゾーンはマイナス記号 (-) のオフセットで表されます。各タイムゾーンは経度 15 度をカバーしています。タイムゾーンの時間は、隣接するタイムゾーンの時間と 1 時間異なります。次の 2 つの時間標準は、特定のタイムゾーンの時間の基準として広く使用されています。

  • GMT 0:00

    GMT は、英国グリニッジの王立天文台で観測された時間です。GMT は以前、世界中で使用されていた時間標準でした。

  • UTC +00:00

    協定世界時 (UTC) は、世界中で使用されている主要な時間標準です。時間の経過とともに、地球の自転は遅くなります。したがって、毎年は前年よりも 10 分の 1 秒長くなります。観測時間が国際原子時 (TAI) から大きくずれるのを防ぐために、国際地球回転・基準系事業 (IERS) は数年ごとに UTC 時間にうるう秒を追加します。UTC は、世界的な時間標準として GMT に取って代わりました。

説明
  • GMT とは異なり、UTC は特定の地域の時間ではありません。タイムゾーンの時間を表すために UTC を使用する場合は、タイムゾーンを示すためにプラス記号 (+) またはマイナス記号 (-) の整数を追加する必要があります。たとえば、UTC+0 を使用して GMT を参照できます。これは、UTC からのオフセットがないことを意味します。

  • UTC+08 は、東半球の 8 番目のタイムゾーンを示します。このタイムゾーンでは、時間は 0 タイムゾーンよりも 8 時間進んでいます。

Hologres は PostgreSQL と互換性があります。PostgreSQL は POSIX タイムゾーン仕様に準拠しています。マイナス記号 (-) がプラス記号 (+) になり、プラス記号 (+) がマイナス記号 (-) になるように、オフセット記号を切り替える必要があります。負の記号は東のタイムゾーンを示し、正の記号は西のタイムゾーンを示します。Hologres では、すべての日付と時刻の値は UTC を使用してタイムゾーンを指定します。タイムゾーンが指定されていない場合、すべての Alibaba Cloud リージョンでデフォルトのタイムゾーン UTC-08 が使用されます。UTC-8 は東半球の 8 番目のタイムゾーンです。UTC-08 の時間は、UTC+0 または GMT の時間よりも 8 時間進んでいます。Hologres は、TIMESTAMP と TIMESTAMPTZ の 2 つのタイムスタンプデータ型をサポートしています。タイムゾーンは TIMESTAMP では指定されませんが、TIMESTAMPTZ では指定されます。

説明

タイムゾーンを持つデータには、TIMESTAMPTZ データ型を使用することをお勧めします。

データ型

説明

精度

TIMESTAMP

タイムゾーンを指定せずに、日付 + 時刻 形式でタイムスタンプ値を格納します。

このデータ型は、格納されたタイムスタンプ値がクライアントに指定されたタイムゾーンに基づいて変更されないようにします。クライアントに格納されているタイムスタンプ値は、クライアントに書き込まれた値と同じであり、タイムゾーン情報は含まれていません。

マイクロ秒

2022-01-01 01:01:01.123456

TIMESTAMPTZ (TIMESTAMP WITH TIME ZONE の略)

タイムスタンプ値を 日付 + 時刻 形式で格納し、値へのサフィックスとしてタイムゾーンを指定します。

Hologres は、タイムゾーンを指定するために UTC を使用します。Hologres の TIMESTAMPTZ 型の列に値を書き込むと、Hologres はクライアントタイムゾーンの時間を UTC+0 タイムゾーンに自動的に変換します。クライアントでタイムスタンプ値をクエリすると、Hologres は TimeZone パラメータに基づいて UTC+0 の時間値をクライアントタイムゾーンに戻します。

ミリ秒

2022-02-01 10:33:20.125+08

クライアントのデフォルトタイムゾーンのクエリ

次のステートメントを実行して、クライアントのデフォルトタイムゾーンをクエリできます。

説明
  • HoloWeb でステートメントを実行すると、デフォルトの戻り値は PRC で、これは UTC-08 を示します。

  • 別の開発ツールを使用していて、クエリ結果がデフォルトのタイムゾーンでない場合は、タイムゾーン設定が変更されています。

show timezone;

クライアントのタイムゾーン設定の変更

  • 関連するシステムテーブルを使用する

    pg_timezone_names という名前の PostgreSQL システムテーブルには、さまざまな国と地域のデフォルトタイムゾーンに関する情報が格納されています。次のステートメントを実行して、システムテーブル内のさまざまな国と地域のタイムゾーンをクエリできます。

    select * from pg_timezone_names;

    次の表に、システムテーブルのフィールドを示します。

    フィールド

    データ型

    説明

    name

    text

    タイムゾーンの名前。

    abbrev

    text

    タイムゾーンの略語。

    utc_offset

    interval

    タイムゾーンの UTC オフセット。正のオフセットは西半球のタイムゾーンを示します。負のオフセットは東半球のタイムゾーンを示します。

    is_dst

    boolean

    夏時間が適用されているかどうかを示します。適用されている場合、このパラメータの値は true です。それ以外の場合、このパラメータの値は false です。

    次の表に、Hologres の一般的なタイムゾーンを示します。

    地域

    タイムゾーン

    タイムゾーンのフルネーム

    UTC+0 からのオフセット

    • 中国のすべての地域

    • シンガポール

    • マレーシア (クアラルンプール)

    東半球の 8 番目のタイムゾーン

    • PRC

    • Asia/Shanghai

    • Asia/Singapore

    • Asia/Kuala_Lumpur

    UTC-08

    日本 (東京)

    東半球の 9 番目のタイムゾーン

    Asia/Tokyo

    UTC-09

    インドネシア (ジャカルタ)

    東半球の 7 番目のタイムゾーン

    Asia/Jakarta

    UTC-07

    ドイツ (フランクフルト)

    東半球の 1 番目のタイムゾーン

    Europe/Berlin

    UTC-01

    米国 (バージニア)

    西半球の 5 番目のタイムゾーン

    • US/Eastern

    • America/New_York

    UTC+05

    米国 (シリコンバレー)

    西半球の 8 番目のタイムゾーン

    • US/Pacific

    • America/Los_Angeles

    UTC+08

  • クライアントのタイムゾーン設定を変更する

    デフォルトでは、Hologres のすべてのタイムゾーンは UTC オフセットとして格納されます。すべての Alibaba Cloud リージョンのデフォルトタイムゾーンは UTC-08 です。TimeZone パラメータを使用して、クライアントのタイムゾーン設定を変更できます。次のステートメントを実行して、クライアントのタイムゾーン設定を変更できます。

    説明
    • TimeZone パラメータを設定した後、クライアントに表示されるタイムゾーンのみが変更され、格納されているデータのタイムゾーンは変更されません。

    • HoloWeb に表示されるデフォルトのタイムゾーンは UTC-08 です。

    • セッションレベルでタイムゾーン設定を変更する

      SET コマンドを実行して、セッションレベルで Grand Unified Configuration (GUC) パラメータを設定できます。セッションレベルでパラメータを設定すると、設定は現在のセッションでのみ有効になります。セッションが閉じられると、設定は無効になります。SQL ステートメントの前に SET コマンドを実行することをお勧めします。例:

      -- タイムゾーンを Canada/Eastern に変更します。
      set timezone ='Canada/Eastern';
      
      -- タイムゾーンを東半球の 5 番目のタイムゾーンに変更します。
      set timezone ='05:00:00';           
    • データベースのタイムゾーン設定を変更する

      alter database <db_name> set <value>; ステートメントを実行して、データベースの GUC パラメータを設定できます。

      説明

      ステートメントを実行するときは、次の項目に注意してください。

      • データベースの変更を有効にするには、データベースをクライアントから切断してから、データベースをクライアントに再接続します。

      • 変更は新しいデータベースに自動的に適用されません。新しいデータベースの GUC パラメータを手動で設定する必要があります。

      例:

      -- データベースのタイムゾーンを UTC+0 に変更します。
      alter database <db_name> set timezone = 'UTC-0';
      
      -- データベースのタイムゾーンを西半球の 5 番目のタイムゾーンに変更します。
      alter database <db_name> set timezone = 'UTC+05';

Hologres と他のデータソース間の時間関連データ型のマッピング

次の表に、Hologres と他のデータソース間の時間関連データ型のマッピングを示します。マッピングに基づいてデータ型がマッピングされていない場合、データまたはタイムゾーンの不整合が発生します。

データソース

データソースのデータ型

ソースデータの例

Hologres のデータ型

Hologres でのマッピングされた例

説明

MySQL

DATETIME

2001-07-14 02:14:19

TIMESTAMP

2001-07-14 02:14:19

MySQL の DATETIME 型のデータには、タイムゾーン値が含まれていません。このタイプのデータは文字列と見なすことができます。有効な値の範囲は、'1000-01-01 00:00:00' から '9999-12-31 23:59:59' です。

MySQL は DATETIME 型のデータを元の形式で格納します。このタイプのデータは、Hologres の TIMESTAMP 型のデータにマッピングされます。

TIMESTAMP

2019-02-23 05:21:16

TIMESTAMPTZ

2019-02-23 05:21:16+08

デフォルトでは、MySQL の TIMESTAMP 型のデータは UTC 形式に従い、タイムゾーン値が含まれています。有効な値の範囲は、'1970-01-01 00:00:01' UTC から '2038-01-19 03:14:07' UTC です。

MySQL は、データベースに設定されたタイムゾーンから UTC に TIMESTAMP 型のデータを変換して格納します。MySQL では、デフォルトのタイムゾーン値はクライアントのタイムゾーン値です。このデータ型は、Hologres の TIMESTAMPTZ にマッピングされます。

MaxCompute

DATETIME

2021-11-29 00:01:00

TIMESTAMPTZ

2021-11-29 00:01:00.000+08

デフォルトでは、MaxCompute の DATETIME 型のデータは UTC 形式に従い、ミリ秒単位の精度です。有効な値の範囲は、'0000-1-1' から '9999-12-31' です。このデータ型は、Hologres の TIMESTAMPTZ にマッピングされます。

TIMESTAMP

2021-01-11 00:00:00.123456789

TIMESTAMPTZ

2021-01-11 00:00:00.123+08

デフォルトでは、MaxCompute の TIMESTAMP 型のデータは UTC 形式に従い、ナノ秒単位の精度です。有効な値の範囲は、'0000-01-01 00:00:00.000000000' から '9999-12-31 23.59:59.999999999' です。このデータ型は、Hologres の TIMESTAMPTZ にマッピングされます。

説明

Hologres の基盤となるレイヤーは、ナノ秒をミリ秒に自動的に変換します。したがって、Hologres のデータ精度に注意を払う必要はありません。

Flink

TIMESTAMP

2007-04-30 13:10:02.047

TIMESTAMPTZ

2007-04-30 13:10:02.047+08

デフォルトでは、Flink の TIMESTAMP 型のデータは UTC 形式に従い、ミリ秒単位の精度です。このデータ型は、Hologres の TIMESTAMPTZ にマッピングされます。

DataHub

TIMESTAMP

2020-03-05 10:10:00.123456+08

TIMESTAMPTZ

2020-03-05 10:10:00.123+08

DataHub の TIMESTAMP 型のデータは UTC 形式に従い、マイクロ秒単位の精度です。Hologres コネクタを使用して TIMESTAMP 型のデータを Hologres に書き込むと、Hologres はデータのタイムゾーン値を UTC+0 に自動的に変換します。このデータ型は、Hologres の TIMESTAMPTZ にマッピングされます。

FAQ

  • DataHub から Hologres に TIMESTAMP 型のデータをリアルタイムで同期すると、データ型は変更されませんが、Hologres に書き込まれる時間値は元の時間値よりも 8 時間早くなります。なぜですか?

    • 考えられる原因: データを書き込むときに、Hologres コネクタは元のデータのタイムゾーン値を UTC+0 に自動的に変換します。Hologres で TIMESTAMP データ型を使用する場合、TIMESTAMP 型のデータにはタイムゾーン値が含まれていないため、Hologres に書き込まれる時間値は UTC+0 と見なされます。UTC+0 タイムゾーンは、Hologres のデフォルトタイムゾーンよりも 8 時間早いです。

    • 解決策: Hologres にテーブルを作成し、マッピングされたデータ型を TIMESTAMP から TIMESTAMPTZ に変更します。

  • DataHub から Hologres にデータをリアルタイムで同期すると、データ型は Hologres で TIMESTAMPTZ に変換されます。ただし、Tableau を使用して同期されたデータを表示すると、表示されるデータは Hologres に格納されているデータと 8 時間のオフセットがあります。なぜですか?

    • 考えられる原因: Tableau のデータページに表示されるタイムゾーンが不適切です。

    • 解決策: HoloWeb のデフォルトタイムゾーンは UTC+08 です。HoloWeb にアクセスして、表示されているタイムゾーンがビジネスデータに適しているかどうかを確認します。[初期 SQL] 機能を使用して Tableau を Hologres に接続するときに、タイムゾーン設定を変更できます。ステートメントの例:

      -- Tableau に表示されるタイムゾーンを UTC+08 に変更します。
      set timezone to 'Asia/Shanghai';
  • MySQL から Hologres にデータを同期した後、Hologres に表示される時間データに +08 の値が含まれるのはなぜですか?

    • 考えられる原因: +08 の値は、同期されたデータのタイムゾーンではなく、現在のクライアントのタイムゾーンを示します。

    • 解決策: ビジネス要件に基づいて、クライアントのタイムゾーン設定を変更します。

  • Java Database Connectivity (JDBC) でタイムゾーン設定を変更するにはどうすればよいですか?

    デフォルトでは、JDBC に表示されるタイムゾーンは Java Virtual Machine (JVM) のタイムゾーンと同じです。JDBC でタイムゾーン設定を変更する場合は、JDBC を使用して Hologres に接続し、次のステートメントを実行します。

    -- タイムゾーンを UTC+07 に変更します。
    set timezone = '+07';