2016-08-06 13 views

Antwort

2

zuerst die Zeichenfolge in einen Zeitstempel mit Zeitzone konvertieren (verwenden Sie die korrekte Funktion). Verwenden Sie die Klausel "AT LOCAL", um das Ergebnis in Ihrer lokalen (Sitzungs-) Zeitzone anzuzeigen.

select to_timestamp_tz('Tue, 31 May 2016 19:43:47 UTC', 
           'Dy, dd Mon yyyy hh24:mi:ss tzr') at local from dual; 

Ergebnis (mit meiner Front-End-Einstellungen für die mit Zeitzone Zeitstempel Anzeige - bei Ihnen können unterschiedlich sein):

31-MAY-16 02.43.47.000000000 PM AMERICA/CHICAGO 
+0

Danke, ich mag diese viel einfachere Lösung. –

-1

Verwenden Sie die tz_offset Funktion, um die Zeitzone für die session's timezone, dann verwenden Sie die from_tz Funktion konvertiert den String in eine timestamp with time zone versetzt zu bekommen, und verwenden at time zone es ändern die Sitzung des Zeitzone zu verwenden.

select from_tz(to_timestamp('Tue, 31 May 2016 11:43:47 UTC' 
          ,'Dy, dd Mon yyyy hh24:mi:ss "UTC"') 
       , 'UTC') 
     at time zone tz_offset(sessiontimezone) 
     ,sessiontimezone 
from dual; 

31/05/2016 19:43:47.000000000 +08:00 Australia/Perth 
+0

Warum so kompliziert? Außerdem ist das harte Codieren von "UTC" im Formatmodell eine schreckliche Übung (ich bin überrascht, wenn man Ihren Ruf bedenkt) - wie wird das funktionieren, wenn die Eingabe aus einer anderen Zeitzonenregion stammt? Der Downvote ist für diese schlechte Kodierungspraxis, nicht für die komplizierte Lösung. Sie sollten die richtige Funktion für Zeitstempel mit Zeitzone verwenden. – mathguy

+0

Warte - hast du die Frage selbst gestellt und beantwortet? Ernst? – mathguy

+0

@mathguy, es ist allgemein üblich, etwas, das Sie auf SO finden, zu dokumentieren, indem Sie Ihre eigene Frage stellen/beantworten. Es gibt anderen die Möglichkeit, andere Optionen zu geben und/oder (wie Sie es getan haben) zu kritisieren :) –

Verwandte Themen