メソッドがJavaで非推奨になった場合、同じ機能を持つ別のより良い方法がありますよね?
Date date = new Date();
date.getHours()
非推奨ですが、クラスのみを使用して時間を取得するgetHours()
最良の方法は何ですか?Date
メソッドがJavaで非推奨になった場合、同じ機能を持つ別のより良い方法がありますよね?
Date date = new Date();
date.getHours()
非推奨ですが、クラスのみを使用して時間を取得するgetHours()
最良の方法は何ですか?Date
Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY).
Joda ライブラリは、日付と時刻を処理するためのもう 1 つの最良の代替手段です。
これらのメソッドは実際には非推奨です。
java.util.Calendar#get() を使用する必要があります
だからあなたの例は
Calendar cal = Calendar.getInstance();
cal.get(Calendar.HOUR);
このクラスの javadoc を参照してください。
cal で getTime を呼び出すと、Date オブジェクトを取得できることに注意してください。
Calendar cal = Calendar.getInstance();
cal.get(Calendar.HOUR);
ご希望の方はデートとして
Date date = cal.getTime();
Calendar または Joda Time ライブラリを使用する必要があります。
ただし、日付しか使用できない場合は、これが唯一の方法です。これはタイムゾーンに合わせて調整されないことに注意してください。
java.util
Date-Time API とその書式設定 APIはSimpleDateFormat
時代遅れで、エラーが発生しやすいものです。それらの使用を完全に停止し、最新の Date-Time APIに切り替えることをお勧めします*。
また、以下はJoda-Timeのホームページからの通知です。
Java SE 8 以降では、このプロジェクトを置き換える JDK のコア部分である java.time (JSR-310) に移行するように求められることに注意してください。
java.time
最新の Date-Time APIを使用したソリューション:
を使用して、タイムゾーン オフセット、年、月、日、時ZonedDateTime#now(ZoneId)
、分、秒、ナノ秒などの情報を取得できる現在の Date-Time オブジェクトを取得できます。タイムゾーン オフセットが必要ない場合は、代わりに使用できます。ただし、現在の時刻情報だけが必要な場合は、 を使用して特定のタイムゾーンの現地時間を取得し、.LocalDateTime#now(ZoneId)
LocalTime#now(ZoneId)
LocalTime
デモ:
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
// Change the JVM's ZoneId, ZoneId.systemDefault() with the applicable ZoneId
// e.g. ZoneId.of("America/Los_Angeles")
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.now(zoneId);
System.out.println(zdt.getHour());
LocalDateTime ldt = LocalDateTime.now(zoneId);
System.out.println(ldt.getHour());
LocalTime time = LocalTime.now(zoneId);
System.out.println(time.getHour());
}
}
サンプル実行からの出力:
13
13
13
最新の Date-Time API の詳細については、Trail: Date Timeを参照してください。
* 何らかの理由で、Java 6 または Java 7 に固執する必要がある場合は、ほとんどのjava.time機能を Java 6 および 7 にバックポートするThreeTen-Backportを使用できます。Androidプロジェクトと Android API で作業している場合レベルはまだ Java-8 に準拠していません。desugarで利用できる Java 8+ APIと Android プロジェクトで ThreeTenABP を使用する方法 を確認してください。