通常、私たちはGoogleを使用して、どの国の現在の現地時間をチェックしていました。この投稿では、PL/SQLで任意の国の現在の現地時間を取得する方法の例を示しています。 国名のリストはV$TIMEZONE_NAMESから入手できます。 Oracleで表示します。この辞書ビューを使用して国の名前を取得し、TZ_OFFSET関数を使用してタイムゾーン値を取得しています 特定の国向け。
国名とタイムゾーンの値を取得したら、[セッションの変更]コマンドを使用して、現在のセッションのタイムゾーンを設定できます。その後、 Current_Timestampを取得して、その国の現在の現地時間を取得できます 。以下に、例を段階的に示します。
次に、以下の例に示すように、TZ_OFFSET関数を使用してV $ TIMEZONE_NAMESビューにクエリを実行し、国名とそのタイムゾーンを確認します。
SELECT DISTINCT tzname, TZ_OFFSET (tzname) FROM V$TIMEZONE_NAMES ORDER BY tzname;
以下のような約577行が表示されます:
America/Mexico_City -05:00 America/Miquelon -02:00 America/Moncton -03:00 America/Monterrey -05:00 America/Montevideo -03:00 America/Montreal -04:00 America/Montserrat -04:00 America/Nassau -04:00 America/New_York -04:00
さて、あなたがニューヨークの現在の現地時間は何であるかを知りたいのなら。次に、ニューヨークのタイムゾーン値である-04:00を指定して次のAlterSessionコマンドを実行します。以下に示すように:
ALTER SESSION SET time_zone = '-04:00';
次に、以下のようにクエリして、ニューヨークの現在の現地時間を取得します。
SELECT TO_CHAR (CURRENT_TIMESTAMP, 'dd-mon-yyyy HH:mi:ss PM') c_time FROM DUAL; C_TIME -------------------------------- 13-jun-2017 04:26:10 AM 1 row selected.
その後、タイムゾーンをローカルに設定する必要があります。次のAlterSessionコマンドを実行して、タイムゾーンを復元します。
ALTER SESSION SET time_zone = LOCAL;
上記のようにクエリを実行すると、お住まいの国の現在の現地時間が取得されます。
PL / SQLにもストアド関数を作成し、国名をパラメータとして渡して任意の国の現地時間を取得しました。ただし、パラメータの国名は、V$TIMEZONE_NAMESビューにある国名のリストに含まれている必要があります。以下は機能です:
CREATE OR REPLACE FUNCTION get_current_local_time (country_name IN VARCHAR2) RETURN VARCHAR2 IS CURSOR c_tz (p_country_name IN VARCHAR2) IS SELECT DISTINCT tzname, TZ_OFFSET (tzname) z_offset FROM V$TIMEZONE_NAMES WHERE UPPER (tzname) = UPPER (p_country_name) AND ROWNUM = 1; v_offset VARCHAR2 (100); vtime VARCHAR2 (100); BEGIN FOR c IN c_tz (country_name) LOOP v_offset := c.z_offset; END LOOP; EXECUTE IMMEDIATE 'Alter Session Set time_zone = ' || CHR (39) || v_offset || CHR (39); SELECT TO_CHAR (CURRENT_TIMESTAMP, 'dd-mon-yyyy HH:mi:ss PM') INTO vtime FROM DUAL; /* restore local time for current session*/ EXECUTE IMMEDIATE 'Alter Session Set time_zone = local'; RETURN (vtime); EXCEPTION WHEN OTHERS THEN RETURN ''; END; /
次に示すように使用します:
SELECT get_current_local_time ('America/New_York') FROM DUAL; C_TIME -------------------------------------------------------- 13-jun-2017 04:33:05 AM 1 row selected.