2011-07-21 18 views
1

文字列の解析に使用されるデフォルトのDateFormatクラスを日付に設定する方法はありますか?Javaでグローバルなデフォルトの日付形式を設定するにはどうすればよいですか?

私の背景:日付文字列が期待される形式でないため、JDBCから日付値を読み取る際に例外が発生します。

(テキストは2011年7月22日に追加):

私は正確に私の質問の説明を必要とするようだ:私は、独自のJDBCドライバと一緒に外国、独自のデータベースを使用します。データベース側で列の型を認識したり変更したりする可能性はありません。 ResultSet.getDate()またはResultSet.getObject()を介してResultSetカラムを読み込もうとすると、「10 Jul 1999 is not valid date」のようなJDBCドライバ内で例外がトリガされます。私が達成したいのは、適切なグローバルデフォルト日付フォーマットを設定することによって、この内部例外を回避することです。たぶん、いくつかのカスタムロケールを最初に実装し、そのロケールをグローバルにインストールする必要がありますか?あなたはちょうどあなたが興味を持っているロケールのフォーマットを取得するためのロケールを受け付けDateFormat静的メソッドのいずれかを使用することができ、また

Locale.setDefault(Locale.US); 

あなたの日付場合:

+0

これはアプリケーションサーバーまたはスタンドアロンアプリケーションの場合 – djna

+0

JDBCからどのように日付を読み取っていますか?そこからどのフォーマットを取得しますか? – AlexR

+2

データベースに日付はどのように表示されますか?なぜそれらをJDBCからjava.sql.Dateまたはjava.sql.TimestampとしてではなくStringとして取得していますか? – Olaf

答えて

4

あなたは、デフォルトのロケールを設定することができます。形式が標準のものと一致しない場合は、パターンに基づいて独自のSimpleDateFormatを作成して、デフォルトのものの代わりに常にそのパターンを使用する必要があります。

+0

ロケールは明白です。彼は日付形式について尋ねる。 – AlexR

+1

@AlexR: "デフォルトのDateFormatクラス"についての私の理解は、現在のロケールのみに依存する、 'DateFormat'の静的メソッドによって返されるフォーマットです。それはあなたが意味するものではない場合、私に知らせて、私は答えを削除することができます。 – OpenSauce

+0

フィッティング日付形式のロケールがある場合は、デフォルトのロケール_could_を設定すると思います( "dd MMM yyyy"にする必要があります)。カスタムロケールを派生させてインストールすることは可能ですか? – blerontin

6

これはまったく必要ありません。

日付がないVARCHARか何かのように、使用され、あなたは(組み合わせ例:日付のみ、または日付と時刻)を保存したい情報DBに応じて、DATEDATETIMEまたはTIMESTAMPフィールドとしてDBに格納する必要があります。このような日付特有のフィールドは、基本的にエポック時間を値として整数/長さとしてカバー内の値を格納する。

DATETIMEまたはTIMESTAMPのような日付+時刻フィールドタイプを使用していると仮定すると、PreparedStatement#setTimestamp()を使用してDBに保存する必要があります。ここでdate変数がjava.util.Date型であると仮定し、例を示します

preparedStatement.setTimestamp(1, new Timestamp(date.getTime())); 

そして、あなたは順番にjava.util.Dateのサブクラスなので、あなただけの可能性Timestampを返すResultSet#getTimestamp()を使用してDBからそれらを取得する必要があります安全にそれをアップキャスト:

Date date = resultSet.getTimestamp("columnname"); 

これは技術的に目視側にではなく、永続層で起こるべきである、人間が読めるStringフォーマットに/からjava.util.Dateオブジェクトをフォーマット/構文解析するように。これをどのくらい正確に行うかは、Swing、JSP、JSF、Struts2、Spring-MVCなど、使用されるビュー/ UIテクノロジ/フレームワークによって異なります。あなたが使っている質問があなたの質問からはっきりしないので、適切な答えを出すことはできません。一般的に、彼らはすべてカバーの下にSimpleDateFormat APIを使用します。あなたは生の形でそれを使うことさえできます。

+0

残念ながら、私はデータベースレイヤーの正確な列タイプを知らないので、変更する可能性はありません。これは、私が接続しているいくつかの外国のレガシーデータベースです。私はそれに関する記述を更新しました。 – blerontin

関連する問題