Oracle日期模式到java日期模式

是否有任何实用程序从Oracle to_char格式模式返回java.text.SimpleDateFormat模式?

 create or replace type type_sample as object ( f_id number, f_name varchar2(100), f_start_date date, f_end_date date ) / SET SERVEROUTPUT ON DECLARE xmltype1 SYS.XMLType; message type_sample; BEGIN message := new type_sample(1, 'Manohar', current_date, sysdate); xmltype1 := XMLtype.createXML(message); DBMS_OUTPUT.PUT_LINE('out_errm : '|| xmltype1.getStringVal()); END; / 1Manohar26-JAN-13**26-JAN-13** 

我有上面的XML来自DataBase。 这里的日期格式基于运行上述代码的会话以不同的格式出现。

我在这里可以做的是,可以将该会话的dateformat模式从java端获得。 如果我可以将dateformat模式(oracle db)转换为java.text.SimpleDateFormat模式,我的问题就解决了。 你能帮帮我吗?


我没有得到预期的答案。 可能是我的演讲没有清楚地解释问题。

我现在会问一个直截了当的问题。 据我所知java.text.SimpleDateFormat毕竟是java.text.DateFormat的一个实现。 DateFormat的这种实现可以理解以下模式字母

 G Era designator y Year M Month in year w Week in year W Week in month D Day in year d Day in month F Day of week in month E Day in week a Am/pm marker H Hour in day (0-23) k Hour in day (1-24) K Hour in am/pm (0-11) h Hour in am/pm (1-12) m Minute in hour s Second in minute S Millisecond z Time zone Z Time zone 

是否有其他java.text.DateFormat实现,可以理解其他一些模式字母组? 如果有的话,请告诉我。

XML的日期之一是26-JAN-13。 这将是“dd-MMM-yy”的SimpleDateFormat

 SimpleDateFormat oracleFormat = new SimpleDateFormat("dd-MMM-yy"); Date date = oracleFormat.parse(dateString); 

不完全是你问的问题,但这里有一种不同的方法来避免会话的NLS参数的不确定性。 您可以在对象中进行转换,因此您可以使用显式日期格式掩码,并且在将其转换为XML时它已经是一个字符串:

 create or replace type type_sample as object ( f_id number, f_name varchar2(100), f_start_date varchar2(10), f_end_date varchar2(10), constructor function type_sample(self in out nocopy type_sample, f_id number, f_name varchar2, f_start_date date, f_end_date date) return self as result ) / create or replace type body type_sample as constructor function type_sample(self in out nocopy type_sample, f_id number, f_name varchar2, f_start_date date, f_end_date date) return self as result is begin self.f_id := f_id; self.f_name := f_name; self.f_start_date := to_char(f_start_date, 'YYYY-MM-DD'); self.f_end_date := to_char(f_end_date, 'YYYY-MM-DD'); return; end; end; / 

创建对象的方式没有变化:

 set serveroutput on declare xmltype1 sys.xmltype; message type_sample; begin message := new type_sample(1, 'Manohar', current_date, sysdate); xmltype1 := xmltype.createxml(message); dbms_output.put_line('out_errm : '|| xmltype1.getStringVal()); end; / out_errm : 1Manohar2013-02-042013-02-04 

无论会话的NLS_DATE_FORMAT (在此会话中恰好是DD-MON-RR ),XML中的日期始终为YYYY-MM-DD格式。 你可以使用你想要的任何固定格式,你只需要同意对象和Java之间的格式。

(我想我假设这是对象将被用于的唯一内容;否则将日期放入字符串不是一个好主意……)。