2016-11-28 36 views
1

的Date.toString()的默認格式似乎是,在美國地區,是這樣的:的Java Date.toString在Oracle的TO_DATE

Thu Nov 24 15:20:52 CET 2016 

Oracle數據庫有一個功能「TO_DATE」,允許從轉換字符串至今。第一個參數是日期格式。

這是映射Java Date.toString()字符串的正確日期格式?它是:

DAY MONTH DD HH24:MI:SS TZD YYYY 

謝謝。

+1

從Java訪問數據庫時,需要使用JDBC的set/getTimestamp(或set/getDate)方法,而不是設置字符串值。 –

+0

現場並不總是完美的:-)。我沒有控制的java代碼也沒有通過值,只是我可以配置oracle「to_date」格式的字符串。 –

回答

2

一個Oracle DATE數據類型沒有時區 - 你需要一個TIMESTAMP WITH TIMEZONE數據類型:

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

如果你想轉換爲DATE(和時間區區域總是CET),那麼你可以使用:

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

如果你想讓它作爲一個DATE數據類型,並尊重原始字符串中的時區,那麼您將需要(1)將其轉換爲TIMESTAMP WITH TIMEZONE數據類型; (2)將該值轉換爲標準時區(UTC通常用於此); (3)然後將其轉換成一個日期:

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; 

將輸出的日期2016-11-24 14:20:52(輸入日期的UTC表示)。

+0

Thnaks的答案。在第二個例子中,「CET」不能是TZD? –

+0

@pasabaporaqui由於'DATE'數據類型沒有時區,因此不能理解'TZD'格式掩碼(您將得到'ORA-01821:日期格式不可識別'異常)。 – MT0

+0

@pasabaporaqui添加了一個編輯功能,在將其投射到日期之前對時區進行標準化。 – MT0

0

在Java中,使用toString()方法的默認日期格式爲EEE MMM dd HH:mm:ss zzz yyyy。我不知道爲什麼,但Oracle不支持解析語法'EEE','MMM'和'zzz'。

瞭解更多:Table 9-4 Datetime Format Elements