Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Holen Sie sich die aktuelle Ortszeit eines beliebigen Landes in PL/SQL

Normalerweise haben wir Google verwendet, um die aktuelle Ortszeit eines Landes zu überprüfen. In diesem Beitrag gebe ich ein Beispiel, wie Sie die aktuelle Ortszeit eines beliebigen Landes in PL/SQL erhalten können. Sie können die Liste der Ländernamen über V$TIMEZONE_NAMES abrufen Ansicht in Oracle. Ich verwende diese Wörterbuchansicht, um die Ländernamen abzurufen, und verwende die TZ_OFFSET-Funktion, um den Zeitzonenwert abzurufen für ein bestimmtes Land.

Nachdem Sie den Ländernamen und den Zeitzonenwert erhalten haben, können Sie den Befehl Alter Session verwenden, um die Zeitzone der aktuellen Sitzung einzustellen. Danach können Sie Current_Timestamp abrufen, um die aktuelle Ortszeit dieses Landes zu erhalten . Unten gebe ich Schritt für Schritt ein Beispiel.

Fragen Sie zuerst die V$TIMEZONE_NAMES-Ansicht mit der TZ_OFFSET-Funktion ab, um die Ländernamen und ihre Zeitzone zu überprüfen, wie im folgenden Beispiel gezeigt:

 SELECT DISTINCT tzname, TZ_OFFSET (tzname)
 FROM V$TIMEZONE_NAMES
ORDER BY tzname;

Sie erhalten etwa 577 Zeilen wie unten:

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

Nun, wenn Sie wissen wollen, was die aktuelle Ortszeit in New York ist. Dann führen Sie den folgenden Alter Session-Befehl mit dem Zeitzonenwert New York aus, der -04:00 ist. Wie unten gezeigt:

ALTER SESSION SET time_zone = '-04:00';

Fragen Sie dann wie folgt ab, um die aktuelle Ortszeit für New York zu erhalten.

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.

Danach sollten Sie die Zeitzone auf lokal einstellen. Führen Sie den folgenden Alter Session-Befehl aus, um die Zeitzone wiederherzustellen:

ALTER SESSION SET time_zone = LOCAL;

Wenn Sie nun wie oben abfragen, erhalten Sie die aktuelle Ortszeit Ihres Landes.

Ich habe auch in PL/SQL eine gespeicherte Funktion erstellt, um die Ortszeit eines beliebigen Landes abzurufen, indem ich den Ländernamen als Parameter übergebe. Der Ländername des Parameters sollte jedoch aus der Liste der Ländernamen in der V$TIMEZONE_NAMES-Ansicht stammen. Unten ist die Funktion:

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;
/

Verwenden Sie es jetzt wie unten gezeigt:

SELECT get_current_local_time ('America/New_York') FROM DUAL;
C_TIME 
--------------------------------------------------------
13-jun-2017 04:33:05 AM 
1 row selected.