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