2016-11-28 1 views
1

Das Standardformat für Date.toString() in einer US-locale zu sein scheint, so etwas wie:Java Date.toString in Oracle TO_DATE

Thu Nov 24 15:20:52 CET 2016 

Oracle-Datenbank verfügt über eine Funktion "TO_DATE", die aus ermöglicht konvertieren Zeichenfolge bis zum heutigen Tag. Das erste Argument ist das Datumsformat.

Welches ist das richtige Datumsformat, um eine Java Date.toString() - Zeichenfolge zuzuordnen? Ist es das:

DAY MONTH DD HH24:MI:SS TZD YYYY 

?

Danke.

+1

Wenn Sie von Java aus auf eine Datenbank zugreifen, müssen Sie die Methoden 'set/getTimestamp' (oder' set/getDate') von JDBC verwenden und keine Zeichenfolgenwerte festlegen. –

+0

Das Leben ist nicht immer perfekt :-). Ich habe keine Kontrolle über den Java-Code noch über den übergebenen Wert, ich kann nur die Formatzeichenfolge "to_date" von Oracle konfigurieren. –

Antwort

2

Ein Oracle DATE Datentyp nicht eine Zeitzone hat - Sie benötigen einen TIMESTAMP WITH TIMEZONE Datentyp:

SELECT TO_TIMESTAMP_TZ(
     'Thu Nov 24 15:20:52 CET 2016', 
     'DY MON DD HH24:MI:SS TZR YYYY' 
     ) 
FROM DUAL 

Wenn Sie zu einem DATE (und der Zeit zu konvertierende Zonenbereich ist immer CET), dann können Sie verwenden:

SELECT TO_DATE(
     'Thu Nov 24 15:20:52 CET 2016', 
     'DY MON DD HH24:MI:SS "CET" YYYY' 
     ) 
FROM DUAL 

Wenn Sie es wünschen als DATE Datentyp und um die Zeitzone in der ursprünglichen Zeichenkette zu respektieren, dann müssen Sie (1) es in einen TIMESTAMP WITH TIMEZONE Datentyp konvertieren; (2) wandle diesen Wert in eine standardisierte Zeitzone um (UTC wird oft dafür verwendet); dann (3) umwandeln, das zu einem Zeitpunkt:

SELECT CAST(
     TO_TIMESTAMP_TZ(
      'Thu Nov 24 15:20:52 CET 2016', 
      'DY MON DD HH24:MI:SS TZR YYYY' 
     ) 
     AT TIME ZONE 'UTC' 
     AS DATE 
     ) 
FROM DUAL; 

die Ausgabe des Datum 2016-11-24 14:20:52 (die UTC-Darstellung des Eingangsdatums).

+0

Thnaks für die Antwort. Im zweiten Beispiel kann "CET" nicht TZD sein? –

+0

@pasabaporaqui Nicht wenn Sie 'TO_DATE' als' DATE' verwenden, haben Datentypen keine Zeitzone, so dass sie die 'TZD' Formatmaske nicht verstehen (Sie erhalten eine 'ORA-01821: Datumsformat nicht erkannt' Ausnahme). – MT0

+0

@pasabaporaqui Eine Bearbeitung hinzugefügt, um die Zeitzone zu standardisieren, bevor sie auf ein Datum übertragen wird. – MT0

0

In Java ist das Standarddatumsformat mit toString() -Methode EEE MMM TT HH: mm: ss zzz yyyy. Ich weiß nicht warum, aber Oracle unterstützt die Syntax der Syntax 'EEE', 'MMM' und 'zzz' nicht.

mehr lesen: Table 9-4 Datetime Format Elements

Verwandte Themen