次の方法で共有


CHANGETIMEZONE ER 機能

CHANGETIMEZONE 関数は、あるタイムゾーンの指定された日付/時刻の値を、別のタイムゾーンの日付/時刻の値に変換した協定世界時 (グリニッジ標準時 [GMT]) の 日時 値を返します。

構文

CHANGETIMEZONE (datetime, base time zone, target time zone)

引数

datetime: DateTime

協定世界時のタイムゾーンで、変換する日付・時刻の値を表します。

base time zone:

指定された日付/時刻の値が変換前にシフトされるタイムゾーンの名前です。

target time zone:

変換された日付/時刻の値が、変換時にシフトするタイムゾーンの名前です。

戻り値

日付時刻

協定世界時のタイムゾーンでの結果の日付/時刻の値です。

使用上の注意

送信元と送信先のタイムゾーンを指定するには、インターネット番号割当機関 (IANA)提供しているタイムゾーン名や、Microsoft Windows がサポートしているタイムゾーン名を使用できます。

実行時に、指定された名前が IANA リストや Windows レジストリに見つからない場合は、「タイムゾーン <time zone name> が存在しません」という例外がスローされます。

サマータイムが実施されているタイムゾーンでは、協定世界時のサマータイム オフセットを考慮して変換されます。 変換時には、このオフセットに関する最新の情報が使用されます。

例 1

この例では、Windows のタイムゾーン名を使用しています。

算出されたフィールドタイプの DSX データソースを構成します。 次の式が含まれています。

CONCATENATE(
    DATETIMEFORMAT( DSY, "O"), 
    " -> ", 
    DATETIMEFORMAT( CHANGETIMEZONE(DSY, "E. Europe Standard Time", "Hawaiian Standard Time"), "O")
)

計算されたフィールドタイプの DSY データソースの式を DATETIMEVALUE ("01-Jun-2021 12:55:00", "dd-MMM-yyyy HH:mm:ss", "EN") と設定すると、DSX データソースは 2021-06-01T12:55:00.0000000+00:00 -> 2021-05-31T23:55:00.0000000+00:00 というテキストを返します。 このテキストは、6 月 1 日に提供された 2 つのタイムゾーンの時差が 24 時間以上であることを示しています。 したがって、基準となるタイムゾーンが対象となるタイムゾーンよりも先行しているため、変換後の日時の値は指定された日時の値よりも 1 日前の値になります。

計算されたフィールドタイプの DSY データソースの式を DATETIMEVALUE ("01-Dec-2021 12:55:00", "dd-MMM-yyyy HH:mm:ss", "EN") と設定すると、DSX データソースは 2021-12-01T12:55:00.0000000+00:00 -> 2021-12-01T00:55:00.0000000+00:00 というテキストを返します。 このテキストは、12 月 1 日に提供された 2 つのタイムゾーンの時差が 24 時間以下であることを示しています。 したがって、変換された日付/時刻の値は、指定された日付/時刻の値と等しくなります。

メモ

同じ式は、同じタイムゾーンのペアについて、指定された日付/時刻の値と変換された日付/時刻の値の間で異なる差異を返します。これは、ある日付/時刻において、指定されたタイムゾーンで異なる協定世界時のサマータイムオフセットが実施されるためです。

例 2

この例では、IANA のタイムゾーン名を使用しています。

算出されたフィールドタイプの DSX データソースを構成します。 次の式が含まれています。

CONCATENATE(
    DATETIMEFORMAT( DSY, "O"), 
    " -> ", 
    DATETIMEFORMAT( CHANGETIMEZONE(DSY, "Europe/Athens", "US/Hawaii"), "O")
)

計算されたフィールドタイプの DSY データソースの式を DATETIMEVALUE ("01-Jun-2021 12:55:00", "dd-MMM-yyyy HH:mm:ss", "EN") と設定すると、DSX データソースは 2021-06-01T12:55:00.0000000+00:00 -> 2021-05-31T23:55:00.0000000+00:00 というテキストを返します。 このテキストは、6 月 1 日に提供された 2 つのタイムゾーンの時差が 24 時間以上であることを示しています。 したがって、基準となるタイムゾーンが対象となるタイムゾーンよりも先行しているため、変換後の日時の値は指定された日時の値よりも 1 日前の値になります。

計算されたフィールドタイプの DSY データソースの式を DATETIMEVALUE ("01-Dec-2021 12:55:00", "dd-MMM-yyyy HH:mm:ss", "EN") と設定すると、DSX データソースは 2021-12-01T12:55:00.0000000+00:00 -> 2021-12-01T00:55:00.0000000+00:00 というテキストを返します。 このテキストは、12 月 1 日に提供された 2 つのタイムゾーンの時差が 24 時間以下であることを示しています。 したがって、変換された日付/時刻の値は、指定された日付/時刻の値と等しくなります。

例 3

算出されたフィールドタイプの DSX データソースを構成します。 次の式が含まれています。

CONCATENATE(
    DATETIMEFORMAT( DSY, "O"), 
    " -> ", 
    DATETIMEFORMAT( CHANGETIMEZONE(DSY, "US/Hawaii", "Europe/Athens"), "O")
)

計算されたフィールドタイプの DSY データソースの式を DATETIMEVALUE ("01-Jun-2021 12:55:00", "dd-MMM-yyyy HH:mm:ss", "EN") と設定すると、DSX データソースは 2021-06-01T12:55:00.0000000+00:00 -> 2021-06-02T01:55:00.0000000+00:00' というテキストを返します。 このテキストは、6 月 1 日に提供された 2 つのタイムゾーンの時差が 24 時間以上であることを示しています。 したがって、変換後の日時の値は、対象となるタイムゾーンが基準となるタイムゾーンよりも先行しているため、指定された日時の値よりも 1 日遅くなります。

例 4

外部のソースから、タイムゾーン情報を含まないテキストで、日付/タイムスタンプが送信される場合があります。 しかし、ソースが運用されているタイムゾーンがわかっている場合があります。 たとえば、スペインで事業を行っているサービスから日付/時刻スタンプ 01/12/2021 12:55:00 を受け取ったとします。 この日時の値をデータベースに正しく保存するには、以下の変換を行ってください:

  • 算出されたフィールドタイプの DSY データソースを設定して、日付/タイムスタンプをテキストから協定世界時の日付/時刻の値に変換します。

    DATETIMEVALUE ("01/12/2021 12:55:00", "dd/MM/yyyy HH:mm:ss", "ES")

  • 算出されたフィールドタイプの DSX データソースで、変換された日付/時刻の値を、外部ソースのタイムゾーンの日付/時刻の値として協定世界時にシフトするように構成します。

    CHANGETIMEZONE(DSY, "Romance Standard Time", "GMT Standard Time")

メモ

CHANGETIMEZONE の機能を使用して日付/時刻の変換を行う場合、日付/時刻の値は、協定世界時のタイムゾーンの値としてデータベースに保存されることに注意してください。 この値はアプリケーションのページで表示する前に、変換されます。 この変換では、現在サインインしているアプリケーション ユーザーの優先ゾーンとして設定されているタイムゾーンが考慮されます。

追加リソース

日時の機能