私はDate
このようなものを作成しようとしています:
date = new Date(year-1900, mon-1, day, hrs, min, sec);
Eclipseは、「コンストラクターDate(int, int, int, int, int)
は非推奨です」という警告を表示します。
コンストラクターが非推奨になるとはどういう意味ですか?また、どうすればよいですか?
私はDate
このようなものを作成しようとしています:
date = new Date(year-1900, mon-1, day, hrs, min, sec);
Eclipseは、「コンストラクターDate(int, int, int, int, int)
は非推奨です」という警告を表示します。
コンストラクターが非推奨になるとはどういう意味ですか?また、どうすればよいですか?
非推奨とは、文字通りの不承認を意味しますが、より正確な翻訳は廃止されます。非推奨とは、このメソッドが引き続き使用可能であることを意味しますが、使用しないでください。徐々に段階的に廃止されます。同じことをする新しい方法があります。非推奨のメソッドには、特別なJavadocコメントが付けられています。
/**
*@deprecated Please now use newMethod()
*@see newMethod()
*/
使用:
Calendar.set(year + 1900, month, date, hrs, min)
また
GregorianCalendar(year + 1900, month, date, hrs, min)
。APIドキュメントで提案されているように。
これは、新しいコードで使用するべきではないことを意味します。これは通常、何かを達成するためのより良い方法がある場合に当てはまりますが、下位互換性のために古い方法が維持されます。
代わりに、完全なメッセージがうまくいけばあなたに示唆するように、APIを使用することができCalendar
ます-または(より良いIMO)JodaTimeまたはJava8のjava.time
パッケージを使用することができます(チュートリアルを参照)。どちらもはるかに優れた日付/時刻APIです。に
非推奨のAPIに関しては、コンパイラメッセージが代替案を示唆していないCalendar.set(...)
場合は、常にJavadocを確認する価値があります。この場合は。を使用することを提案しています。
つまり、通常は危険であるため、またはより適切な代替手段が存在するため、新しいコードで使用するべきではありません。非推奨のプログラム要素が非推奨でないコードで使用またはオーバーライドされると、コンパイラは警告を発します。
あなたの場合、java.util.Calendar
の代わりにクラスを使用できますjava.util.Date
。
ちなみに、Java 8以降では、これらの古いクラスは新しいjava.timeパッケージ(チュートリアル)に取って代わられています。Joda -Timeに触発され、 JSR 310によって定義され、 ThreeTenExtraプロジェクトによって拡張されました。古いクラスはそのまま残り、(非推奨の部分を避けながら)引き続き使用できますが、新しいクラスに移行することをお勧めします。
非推奨とは、それが何かを行うためのレガシーまたは古い方法であり、回避する必要があることを意味します。
このドキュメントhttp://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.htmlによると、を使用しますCalendar.set(...)
。
コードの移行に役立つコードスニペットを次に示します。両方のプリントは同じです。
import java.util.Calendar;
import java.util.Date;
public class Tinker {
public static void main(String[] args) {
int Y = 2015; // Year 2015
int M = 11; // 0..11 -- December
int D = 15; // 15th
int H = 16; // 4:00 PM
int MN = 28; // 4:28 PM
int S = 41; // 4:28:41
Date d = new Date(Y-1900,M,D,H,MN,S);
System.out.println(d);
Calendar c = Calendar.getInstance();
c.set(Y, M, D, H, MN, S);
d = c.getTime();
System.out.println(d);
}
}
出力:
Tue Dec 15 16:28:41 CST 2015
Tue Dec 15 16:28:41 CST 2015
非推奨であるため、実際に使用するべきではないことを意味します。代わりに、カレンダーを使用してフィールドから日付を生成できます。
非推奨とは、このコンストラクターの使用が推奨されていないことを意味し、Javaの将来のリリースで削除される可能性があります。CalendarAPIを使用します。
…そして私は何ができますか?
例えば:
ZoneId zone = ZoneId.of("America/Glace_Bay");
ZonedDateTime dateTime = ZonedDateTime.of(2019, 10, 27, 12, 34, 56, 0, zone);
System.out.println(dateTime);
出力は次のとおりです。
2019-10-27T12:34:56-03:00[アメリカ/Glace_Bay]
使用しないでくださいDate
。そのクラスは常に不十分に設計されていました。ほとんどのコンストラクターとほとんどのメソッドが非常に迅速に非推奨になったのには理由があります。これらは、タイムゾーン間で確実に機能しません。今日、java.timeの方がはるかに優れています。
Date
現時点でjava.timeにアップグレードする余裕がないレガシーAPIが必要な場合にのみ、次のように変換します。
Instant pointInTime = dateTime.toInstant();
Date oldFashionedDate = Date.from(pointInTime);
System.out.println(oldFashionedDate);
私のタイムゾーンでの出力は次のとおりです。
日10月27日15:34:56GMT2019
時間帯が指定内容と一致していません。これは、私が別のタイムゾーンにいるためです。Date.toString
(fromから呼び出されるSystem.out.println
)は、JVMのデフォルトのタイムゾーンで日付をレンダリングします。これは、長年にわたって多くの混乱を招きました(これは、そのクラスを回避する多くの理由の1つにすぎません)。はDate
正しい時点を表しており、レガシーAPIに使用できます。
コンストラクターが非推奨になるとはどういう意味ですか…</p>
多くの人がすでにそれをうまく説明しています。私は、コンストラクターを削除するという約束として、1990年代からの非推奨を受け入れていません。Java 9では、非推奨のアイテムに削除のマークを付ける可能性が導入されました。ある時点で、このコンストラクターに削除のマークを付けるかどうかはまだ知りたいです。
非推奨とは、通常、この関数の使用を推奨されていないことを意味します。
何らかの理由で、Javaはそれなしの方が良いと判断されました(より良い代替手段が存在するため、代わりにそれを使用する必要があります)。そのため、Javaの将来のバージョンから削除される可能性があります。非推奨は基本的に、「これは将来削除される可能性がありますが、最初にコードから削除する機会を与えるために少し長く保持しています」という警告です。
非推奨とは、コアAPIおよびその他のJavaライブラリがそれに依存しておらず、より良い方法があることを意味します。