2011-08-09 8 views
2

こんにちは、読んでいただきありがとうございます。Java - xs:date形式に準拠した文字列をOracleのタイムスタンプ形式に変換する

私は現在、xs:date形式の日付/時刻を表す文字列をOracleのタイムスタンプに変換するという課題に直面しています。

私のようなルックスから始める文字列 - 「2011-07-12T16:20:02-04:00」

私はOracleのタイムスタンプに含まれるタイムゾーンのオフセットを必要としています。 「:20:02.0000 2011-07-12 12」上記の例ではタイムゾーンのオフセットがあったことを

- 変換処理が行われた後、私は次のようになり、タイムスタンプで終わる必要がありますタイムスタンプに組み込まれました。

誰でもこれを達成する方法はありますか?私はSimpleDateFormatオブジェクトを使用して文字列からjava.util.Dateオブジェクトを作成し、それをjava.sql.Timestampオブジェクトに変換しようとしました。ここでの問題は、タイムゾーンが考慮されていないことです。java.util.Dateオブジェクトはタイムゾーンオフセットを無視していると思います。

希望誰かが私をここに助けることができる...

編集:解決 - ここに私が使用して終了コードだ - 読書のため再び

Calendar Cal = DatatypeConverter.parseDateTime("2011-07-12T16:20:02+02:00"); 
     DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 
     df.setTimeZone(TimeZone.getTimeZone("GMT")); 
     System.out.println(df.format(Cal.getTime())); 

おかげで、

ザカリー・カーター

+0

は、添付のリンクを参照してください、それはあなたを助けるかもしれません。 http://stackoverflow.com/questions/166600/java-date-format-incompatible-with-xquery-xsdate-format-h​​ow-to-fix – Perception

+0

回答Perceptionに感謝します。残念ながら、私はApacheコモンズライブラリなどの外部Javaライブラリに依存することはできません。可能であれば、標準のJavaライブラリを使用してこの変換を実行する必要があります。 –

+0

実際には、 'Calendar.getTime()'が 'Date'オブジェクトを返すことを知っています。これも知らなかった。 – membersound

答えて

2

DateFormatsにはタイムゾーンがあります。入力タイムスタンプを解析するために正しい形式でSimpleDateFormatを設定する必要があります(下記の注を参照)。技術的にはタイムゾーン情報が含まれているので、入力フォーマッタでどのTimeZoneを設定しても問題ありません(安全のために「GMT」を使うことができます)。 GMTタイムゾーン(タイムゾーンオフセットなしなど)を使用してタイムスタンプを出力するように見えるので、「GMT」タイムゾーンで設定された出力フォーマットで別のSimpleDateFormatを作成できます。あなたはあなたのためにそれを処理するためにJAXB utilsパッケージを使用できるように

のSimpleDateFormatは、XSD入力フォーマットを扱うことができない場合があり、以下を参照してください。http://download.oracle.com/javase/6/docs/api/javax/xml/bind/DatatypeConverter.html#parseDateTime(java.lang.String)を

1

SimpleDateFormatは、適切な形式を使用する場合、タイムゾーンを考慮します。このコードを実行して結果を確認してください:

String s = "2011-07-12T16:20:02-0400"; 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
    sdf.setTimeZone(TimeZone.getTimeZone("GMT")); 
    System.out.println(sdf.format(sdf.parse(s))); 

-04:00から-0400に必ず変換してください。

+0

SimpleDateFormatは、タイムゾーン "Z"のもののような有効なXML dateTime値を受け入れません。 – Rich