Top > SQL 関数一覧 (O‐S) > SYS_EXTRACT_UTC

標準時、世界時、世界標準時、協定世界時を求める

呼称は色々あるみたいですが、俗に GMT 、グリニッジ標準時 と呼ばれているもの。正確には UTC が正しい。

syntax

SYS_EXTRACT_UTC ( datetime_with_timezone )
return [ TIMESTAMP ]

parameter

datetime_with_timezoneタイムゾーン付きの日付式

return

  • 指定したタイムゾーン付きの日付を協定世界時のタイムスタンプ型(タイムゾーンなし) にして戻す。

avail

  • SQL および PL/SQL の両方で使用可能。

SYS_EXTRACT_UTC 関数の内容

タイムゾーン付きの日付式 datetime_with_timezone をタイムスタンプ型の標準時(協定世界時)に変換する。

SYS_EXTRACT_UTC 使用例

SQL> select SYS_EXTRACT_UTC(timestamp '2007-01-01 09:00:00.0 +09:00')
  2   from dual;
 
SYS_EXTRACT_UTC(TIMESTAMP'2007-01-0109:00:00.0+09:00')
----------------------------------------------------------------------
2007-01-01 00:00:00

UNIX タイム、エポック秒を求める豆知識

UNIX で良く知られた時間の保持形式として 1970年1月1日 00:00:00 を起算とした経過秒を保持する エポック秒 というものがある。この 1970年1月1日 00:00:00 はセッションタイムゾーンの 0 時 ではなく UTC のタイムゾーン環境における時刻から経過した秒のことである。日本のタイムゾーンは +09:00 なので 日本時間では 1970年1月1日 09:00:00 が起算する基準時間となる。

セッション日付 (current_time)を UTC のタイムゾーンに変換してエポック秒を求める式は以下のようになる。(日本でしか使われないなら 1970-01-01 09:00 を起算日にしてしまう方法もあるが正攻法で計算する)

  1  select (
  2    cast(SYS_EXTRACT_UTC(current_timestamp) as date)
  3	  - cast(from_tz(timestamp '1970-01-01 00:00:00', '00:00') as date)
  4    ) * 24 * 60 * 60 epoc_seconds
  5* from dual
 
EPOC_SECONDS
------------
  1602178965

この変換式をタイムゾーンをLOCALTIMEZONE = UTC とみなした(※) 状態で行い、簡略化した式にすると以下となる。

(※) もともと DATE 型には タイムゾーン情報が存在していないので気にする必要がない。

  1  select (
  2    cast(SYS_EXTRACT_UTC(current_timestamp) as date)
  3	- date '1970-01-01'
  4    ) * 24 * 60 * 60 epoc_seconds
  5* from dual
 
EPOC_SECONDS
------------
  1602179079

UNIX タイム(エポック秒)を戻すストアドファンクション UNIXTIME

CREATE OR REPLACE FUNCTION UNIXTIME( P_TIMESTAMP IN TIMESTAMP )
RETURN PLS_INTEGER
IS
	vDate	DATE;
	vEpoc	NUMBER;
BEGIN
	vDate := SYS_EXTRACT_UTC(P_TIMESTAMP);
	vEpoc := vDate - DATE '1970-01-01';
	RETURN vEpoc * 24 * 60 * 60;
END;
/

※ 起算時刻を誤って 1900-01-01 としていたものを 1970-01-01 に修正しました(2020-10-09)

タイムゾーン・時間帯間の日付のコンバート

別のタイムゾーン日付をセッションタイムゾーン日付に変換

UTC と GMT の違い

広く知られたグリニッジ天文台の GMT は、実はかなり前(1928年)より世界の標準時ではなくなっている。

現在の世界標準時は 協定世界時 UTC (Coordinated Universal Time)で セシウム原子時計 による時間をもとに GMT との間で不定期に補正された時刻である。(⇒うるう秒)

GMT は天体観測によって得られる時間である。

 


SQL 関数 - SYS_EXTRACT_UTC 関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト