2016-11-28 125 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