1

java.text.SimpleDateFormatOracleto_charフォーマット パターンからパターンを返すユーティリティはありますか?

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;
/

<TYPE_SAMPLE><F_ID>1</F_ID><F_NAME>Manohar</F_NAME><F_START_DATE>26-JAN-13</F_START_DATE>**<F_END_DATE>26-JAN-13</F_END_DATE>**</TYPE_SAMPLE>

私は上記の XML フォーム データベースを持っています。ここで、日付形式は、上記のコードが実行されるセッションに基づいてさまざまな形式で提供されます。

ここでできることは、そのセッションの 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 の他の実装はありますか? もしあれば、私に知らせてください。

4

2 に答える 2

0

XMLの日付の1つは、2013年1月26日です。それはSimpleDateFormat「dd-MMM-yy」になります

SimpleDateFormat oracleFormat = new SimpleDateFormat("dd-MMM-yy");
Date date = oracleFormat.parse(dateString);
于 2013-02-04T15:06:39.203 に答える
0

あなたが求めていたものとはまったく異なりますが、セッションの 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 : <TYPE_SAMPLE><F_ID>1</F_ID><F_NAME>Manohar</F_NAME><F_START_DATE>2013-02-04</F_START_DATE><F_END_DATE>2013-02-04</F_END_DATE></TYPE_SAMPLE>

日付は、セッション(たまたまこのセッションにある) に関係なく、常にYYYY-MM-DDXML の形式になっています。もちろん、任意の固定形式を使用できます。オブジェクトと Java の間でその形式に同意する必要があります。NLS_DATE_FORMATDD-MON-RR

(私はこれがオブジェクトが使用される唯一のものであると仮定していると思います;そうでなければ、日付を文字列に入れることは良い考えではありません...)。

于 2013-02-04T18:44:32.573 に答える