8

Java Dateユーティリティを使用する場合の実際の意味は、廃止されました。これは、使用が推奨されていないことを意味しますか、それとも禁止されていることを意味しますか?

非推奨のメソッドを使用するのは悪い習慣だと思いますが、よくわからないので調べたいと思いました。

たとえば、次のようなコードを使用しようとしています

String date = request.getParameter("date"); 
model.setDate(new Date(date));

もちろん...これは高レベルの例ですが、この状況では、モデルはDate型を使用しており、リクエストから日付を文字列として取得し、それを使用して日付を作成する必要があります。

私が持っている方法では問題なく動作しますが、非推奨の方法を使用しています。

編集-私は戻って使用しました

SimpleDateFormatフォーマッタ=newSimpleDateFormat(); 
model.setDate(formatter.parse(request.getParameter( "date");



日付は2010年7月23日のようにMM/DD / YYYの形式ですが、ParseExceptionが発生します

これは何からでしょうか?

4

10 に答える 10

6

これは悪い習慣です。ほとんどすべての場合、非推奨のメソッドは代わりに何を使用するかを教えてくれますが、これも例外ではありません(Javadocを参照)。

から作成しようとしていDateますString。しかし、文字列はどのような形式ですか?どのように解析する必要がありますか?英国または米国の日付形式ですか?

これを行う「適切な」方法は、SimpleDateFormatのインスタンスを作成し、そのメソッドを呼び出しparse()てテキスト文字列を渡すことです。これは将来的に機能することが保証されており、現在はより堅牢になります。

于 2010-07-29T16:50:15.890 に答える
3

非推奨のオブジェクトまたはメソッドは、現在のプロジェクトで使用する場合は、推奨されるものを使用することを意味します。彼らがまだそれを持っている理由は、それが非推奨になるに非推奨のメソッドを使用したレガシーコードのためです。典型的な例はStringTokenizervsString.split()メソッドです。

日付の例ではSimpleDateFormat、文字列から日付への変換を行うために使用します。これにより、文字列の日付を解析してDateオブジェクトを作成できる日付形式を作成できます。


あなたの編集のためにこれを行います

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); 

model.setDate(formatter.parse(request.getParameter("date")));

ParseExceptionは、日付形式の構造を指定しなかったために発生し、SimpleDateFormatは日付の構造を認識していませんでした。

于 2010-07-29T16:50:41.907 に答える
3

多くの人が非推奨の意味について言及していますが、これらのメソッドが非推奨になっている理由についての説明はありません。

Sun(Oracleの一部になる前)は、代わりに日付操作に/クラスDateを使用できるようにするために、のいくつかのメソッドを非推奨にしました。CalendarGregorianCalendar

于 2010-07-29T17:18:46.810 に答える
2

「非推奨」とは

「自虐的なユーモア」という言葉、または話者の重要性を最小限に抑えるユーモアを聞いたことがあるかもしれません。非推奨のクラスまたはメソッドはそのようなものです。それはもはや重要ではありません。実際、これは非常に重要ではないため、使用する必要はありません。これは、置き換えられ、将来存在しなくなる可能性があるためです。

Javaは、クラスが進化するにつれて、そのAPI(アプリケーションプログラミングインターフェイス)が必然的に変化するため、非推奨を表現する方法を提供します。一貫性を保つためにメソッドの名前が変更され、新しいより優れたメソッドが追加され、フィールドが変更されます。しかし、そのような変更は問題を引き起こします。開発者が新しいAPIに移行するまで、古いAPIを維持する必要がありますが、開発者が古いAPIへのプログラミングを続行することは望ましくありません。

クラス、メソッド、またはメンバーフィールドを非推奨にする機能により、問題が解決します。Javaは、非推奨の2つのメカニズムをサポートしています。1つはアノテーション(J2SE 5.0以降でサポート)、もう1つはJavadocタグ(1.1以降でサポート)です。古いAPIへの既存の呼び出しは引き続き機能しますが、アノテーションにより、コンパイラは非推奨のプログラム要素への参照を検出したときに警告を発行します。Javadocタグと関連するコメントは、非推奨のアイテムを使用しないようにユーザーに警告し、代わりに何を使用するかをユーザーに伝えます。代わりに何を使用するかをユーザーに伝えます。

http://download-llnw.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html

于 2010-07-29T16:49:56.073 に答える
2

あなたは正しいです、非推奨のメソッドを使用することはお勧めしません。これは、これらのメソッドが特定の状況で問題を抱えているか、より楽観的なソリューションに置き換えられている可能性があるためです。また、将来のバージョンではこれらをサポートしない可能性があります。

于 2010-07-29T17:04:37.020 に答える
1

非推奨とは、バグやその他の悪い理由により、削除が計画されていることを意味します。SimpleDateFormat.parse();を使用することをお勧めします。文字列を解析します。

于 2010-07-29T16:51:14.653 に答える
1

一般に、Sun(Oracleなど)がJavaメソッドの非推奨を宣言した場合、それは、Javaメソッドを含めることについて考えが変わり、使用を思いとどまらせ、将来のバージョンで削除される可能性があることを意味します。もちろん、それを使用している既存のコードの量を誰が知っているので、削除されるまでには長い時間がかかる可能性があります。Javaの発明者が、Javaの発明者が今、どのように何かをするために?

おそらく彼らは何かを非推奨にする正当な理由があったので、なぜ彼らがいくつかの新しい機能がより良いと言うのかを調査する必要があります。

非推奨のDateメソッドの場合、通常、これは、CalendarクラスまたはSimpleDateFormatクラスを使用することを提案していることを意味します。あなたの場合、おそらく後者です。

于 2010-07-29T16:51:48.240 に答える
0

非推奨:現在のバージョンのJavaに存在するものですが、将来のバージョンから削除される予定です。

編集するには、SimpleDateFormatを適切に初期化する必要があります。これにより、どの形式が入ってくるかがわかります。1978年7月22日の形式の場合:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");

于 2010-07-29T17:15:47.000 に答える
0

他の人が言ったように、java.util.Dateメソッドは、Javaチームがjava.util.Calendarでより良いソリューションを持っていると信じていたため、非推奨になりました。

残念ながら、そのクラスは混乱を招き、面倒で、設計が不十分であることが判明しました。

したがって、はい、それらの置き換えを尊重して、非推奨のメソッドを避ける必要があります。しかし、これらの置換(.Calendar)には置換(java.time)があります。

java.time

古い日時クラスはすべて、Java 8に組み込まれたjava.timeフレームワークに取って代わられました。新しいクラスは、後継として意図された、概念は似ていますが再設計された、非常に成功したJoda -Timeフレームワークに触発されています。JSR310によって定義されていますThreeTen-Extraプロジェクトによって拡張されました。チュートリアルを参照してください。

このパッケージを使用してjava.time.format、日時値の文字列表現を解析および生成します。

String input = "07/23/2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "MM/dd/yyyy" );

新しいクラスにはLocalDate、時刻なしで日付のみの値を表すためのクラスが含まれています。

LocalDate localDate = LocalDate.parse( input , formatter );

LocalDateを呼び出すと、標準のISO8601形式であるYYYY-MM-DDtoStringの日付値の文字列表現が得られます。他の形式で文字列を生成するには、別のフォーマッタを定義します。または、「localize」メソッドを呼び出して、特定のローカライズされた形式を決定する際にjava.timeに手間のかかる作業をさせます。

于 2015-12-07T06:45:54.470 に答える
-1

それらを使用しても何も壊れません...まだ。

ただし、将来のバージョンでは削除される可能性があります。

于 2010-07-29T16:47:46.220 に答える