2009-03-18 2 views
24

new Date(dateString)を使用して日付文字列を解析する古いコードがあります。コードをコンパイルすると、非推奨警告Date(java.lang.String) in java.util.Date has been deprecatedが生成されます。JavaでDate(String s)と完全に同等のものはありませんか?

DateFormatクラスにstatic parseメソッドがないにもかかわらず、javadocではDateFormat.parse()を使用することをお勧めしません。

は今、私はSimpleDateFormatを使用する方法を知っているが、私はまったく同じ動作deperecated Dateコンストラクタのを得ていることを確認します。

答えて

47

はここに私の推測だ(私が正しい場合は、最大投票することができますので、私はコミュニティのwikiとして計上しました):

Date parsed; 
try { 
    SimpleDateFormat format = 
     new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); 
    parsed = format.parse(dateString); 
} 
catch(ParseException pe) { 
    throw new IllegalArgumentException(pe); 
} 
+1

まあまあ、まったく同じ振る舞いをしたいのであれば、どうすればいいでしょう。 DateFormatを使用する理由。getInstance()は現在のロケールに適したフォーマッタを返すかどうかを判断するのに適しています。 –

+4

本当に "新しいIllegalgArgumentException()"をしないでください。少なくとも、元の例外(新しいIllegalArgumentException(pe))をチェーンします。 – sleske

+0

新しいSimpleDateFormat( "EEE MMM dd HH:mm:ss zzz yyyy"、Locale.ENGLISH)を使用しなければなりませんでした。この仕事をする - 誰かが問題を抱えている場合に備えて。 – Nitek

2

DateFormatには、DateFormatインスタンスを返す静的メソッドがあります。私はDate(String s)と同じ動作を持っていた1(もしあれば)知りませんが、ここであなたが行く:

DateFormat.getInstance() 
DateFormat.getDateInstance() 
DateFormat.getTimeInstance() 
DateFormat.getDateTimeInstance() 
+1

これらのどれもうまくいかないようです。 – itsadok

2

短い回答(さらなる調査の前)です:いいえ、それと同等ではありません。日付(文字列toParse)コンストラクタ(も推奨されません)クラスDateの解析メソッドと同等です...そして、この方法クレームのjavadoc:これはの解釈とは若干異なること

注意SimpleDateFormatで使用される100未満の年。

これが唯一の変更であれば、このように進むことができます。

7

SimpleDateFormatは方法です。ただし、SimpleDateFormatインスタンスを1つ定義し、これを使用してDateオブジェクトを構築する必要があるかもしれません。そうした場合、SimpleDateFormatはスレッドセーフではなく、潜在的にはデバッグが難しい問題に晒されている可能性があります。

私はこの機会に、より良い考え方(そしてスレッドセーフな)APIであるJodaを見ることをお勧めします。これはJSR-310の基礎を形成します.JSR-310は、新しいJava Date APIです。

これはもう少し作業です。しかし、現時点でコードをリファクタリングする必要があることを考えると、おそらく価値があります。

3

Nicolasが言及しているDate.parse(String s)メソッドのソースを見てみると、という正確にがその動作を再現する日付形式を作成するのが困難または不可能であることがわかります。

警告を排除したい場合は、@SuppressWarnings({“deprecation”})をDate(String)コンストラクタを呼び出すメソッドの外に置くことができます。

将来のJREで今後この動作に確実にアクセスしたい場合は、JDKソースからメソッドを抽出して独自のソースに入れることができます。これには、ソースコードライセンスの慎重な読み込みと、特定のプロジェクトへのアプリケーションの配慮が必要となり、まったく許可されないことがあります。

関連する問題