Java:getMinutesおよびgetHours


142

それ以降Date.getHours、時間と分をどのようにして取得し、Date.getMinutes廃止されましたか?Google検索で見つけた例では、非推奨のメソッドが使用されていました。


2
以下のようなFYI、ひどく面倒日時クラスjava.util.Datejava.util.Calendarjava.text.SimpleDateFormat今のレガシーに取って代わられ、java.timeの Javaの8に、後に内蔵されたクラス。Oracleによるチュートリアル参照してください。
バジルブルク

回答:


171

標準のjava.util.Dateクラスの代わりにJoda Timeを使用してみてください。Joda Timeライブラリには、日付を処理するための優れたAPIがあります。

DateTime dt = new DateTime();  // current time
int month = dt.getMonth();     // gets the current month
int hours = dt.getHourOfDay(); // gets hour of day

Joda Timeライブラリを使用することの長所と短所については、この質問を参照してください。

Joda Timeは、Javaの将来のバージョンに標準コンポーネントとして含まれる可能性があります。JSR-310を参照してください。


従来のjava.util.Dateおよびjava.util.Calendarクラスを使用する必要がある場合は、JavaDocのヘルプ(java.util.Calendarおよびjava.util.Date)を参照してください。

このような従来のクラスを使用して、特定のDateインスタンスからフィールドをフェッチできます。

Date date = new Date();   // given date
Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(date);   // assigns calendar to given date 
calendar.get(Calendar.HOUR_OF_DAY); // gets hour in 24h format
calendar.get(Calendar.HOUR);        // gets hour in 12h format
calendar.get(Calendar.MONTH);       // gets month number, NOTE this is zero based!

2
質問:Java 8がLocalDateTimeで導入されたので、LocalDateTimeよりもJoda Timeを使用する必要がある理由はありますか?
クリップ

@Chripsの意見は異なります。Joda-Timeは、代わりにjava.timeの使用を公式に推奨しています。
Ole VV

96

Date.getHoursのJavadocから

As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)

だから使う

Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);

getMinutesと同等です。


6
それで...現在対応していない日付から時間を取得したい場合、これはどのように機能しますか?
Michael


この恐ろしいクラスは、JSR 310の採用により、数年前に現代のjava.timeクラスに取って代わられましたZonedDateTime。代わりに使用してください。
バジルブルク

58

java.time

私はJoda -Timeのファンですが、Java 8java.timeパッケージを導入してます。これは、ついに価値のあるJava標準ソリューションです!この記事「Java SE 8の日付と時刻」を読んで、時間と分以外のjava.timeに関するかなりの情報を入手してください。

特に、LocalDateTimeクラスを見てください。

時間と分:

LocalDateTime.now().getHour();
LocalDateTime.now().getMinute();

4
これが最良の答えです。読者と自分にこれがタイムゾーンの影響を受けやすい操作であることを思い出させるために、明示的なタイムゾーンを提供することができますLocalDateTime.now(ZoneId.of("Asia/Manilla"))now()一貫性のために1回だけ読み取ります(2つの呼び出しの間に時間が経過します)。日付が本当に関係ない場合でもLocalTime動作します。
Ole VV

1
これありがとう。私は何とかしてこの素晴らしいビルトインクラスを長い間見逃してきました!
クリップ

Ole VVのコメントが正しい。しかし、より良いのは、ZonedDateTimeではなくクラスを使用することですLocalDateTime。ではLocalDateTime、あなたは何も得て、理由もなく、貴重なタイムゾーン情報を破棄しています。
バジルブルク

下位互換性を保つ必要がない場合に役立ちます。Android向けに作成し、古いAPIバージョンをサポートしている場合(または、Java 8が常に利用できるとは限らないその他の場合)は、残念ながら適切ではありません。
M_M

@M_M Java 6および7の場合、java.time機能のほとんどはThreeTen-Backportライブラリにバックポートされています。ThreeTenABPの初期のAndroidにさらに適合。リンクについては、私の回答の最後のセクションを参照してください。
バジルブルク

36

まず、java.util.Calendarをインポートします

Calendar now = Calendar.getInstance();
System.out.println(now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE));

12

tl; dr

ZonedDateTime.now().getHour()

…または…

LocalTime.now().getHour() 

ZonedDateTime

JDによって回答は良いが、最適ではありません。その回答はLocalDateTimeクラスを使用しています。タイムゾーンまたはUTCからのオフセットの概念がないため、そのクラスは瞬間を表すことができません。

使用する方が良いZonedDateTime

ZoneId z = ZoneID.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

タイムゾーンを指定

ZoneId引数を省略すると、JVMの現在のデフォルトのタイムゾーンを使用して、実行時に暗黙的に適用されます。

したがって、この:

ZonedDateTime.now()

…これと同じです:

ZonedDateTime.now( ZoneId.systemDefault() )

明示的であることが望ましく、希望する/予想されるタイムゾーンを渡します。デフォルトは実行時にいつでも変更できます。

重要な場合は、ユーザーにタイムゾーンを確認してください。

時間分

ZonedDateTime時間と分の質問をします。

int hour = zdt.getHour() ;
int minute = zdt.getMinute() ;

LocalTime

タイムゾーンなしの時刻だけが必要な場合は、を抽出しLocalTimeます。

LocalTime lt = zdt.toLocalTime() ;

またはZonedDateTime直接スキップして、に直接移動しLocalTimeます。

LocalTime lt = LocalTime.now( z ) ;  // Capture the current time-of-day as seen in the wall-clock time used by the people of a particular region (a time zone).

java.timeタイプ

最新のjava.timeとレガシーの日時クラスのタイプの表。


java.timeについて

java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスをjava.util.DateCalendar、& SimpleDateFormat

詳細については、Oracleチュートリアルを参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様はJSR 310です。

ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。

java.timeオブジェクトをデータベースと直接交換することができます。JDBC 4.2以降に準拠したJDBCドライバーを使用します。文字列もクラスも必要ありません。java.sql.*

java.timeクラスはどこで入手できますか?

ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。あなたはここにいくつかの有用なクラスのような見つけることがIntervalYearWeekYearQuarter、および多くを



3
int hr=Time.valueOf(LocalTime.now()).getHours();
int minutes=Time.valueOf(LocalTime.now()).getMinutes();

これらの関数は、int値を時間と分で返します。


1
複製。このアプローチは、JDによる回答ですでに説明されています。
バジルブルク2017年

あれjava.sql.Time?確かに、古いクラスを入手する理由はまったくありませんjava.time.LocalTime。複雑すぎます。
Ole VV

次のようになりますgetMinutes()(私は、Java 1.8を使用しています)で推奨されていませんとに置き換えられましたCalendar.get(Calendar.MINUTE)
Saltz3

3

分と時間を取得するもう1つの方法は、SimpleDateFormatを使用することです。

SimpleDateFormat formatMinutes = new SimpleDateFormat("mm")
String getMinutes = formatMinutes.format(new Date())

SimpleDateFormat formatHours = new SimpleDateFormat("HH")
String getHours = formatHours.format(new Date())

以下のようなFYI、ひどく面倒日時クラスjava.util.Datejava.util.Calendarjava.text.SimpleDateFormat今のレガシーに取って代わられ、java.timeの Javaの8に、後に内蔵されたクラス。Oracleによるチュートリアル参照してください。
バジルブルク

2

アドホダの時間を探すことをお勧めします。 http://www.joda.org/joda-time/

私は自分のシックプロジェクトに別のライブラリを追加することを恐れていましたが、それは簡単で高速、そしてスマートで素晴らしいものです。さらに、ある程度、既存のコードでうまく機能します。


1

私はそうすることはお勧めしませんが、java.util.Dateの多くのメソッドが非推奨になっていますが、それらはまだ機能することを指摘する価値があると思います。些細な状況では、それらを使用しても問題ない場合があります。また、java.util.Calendarはかなり遅いので、DateのgetMonthとgetYearの方が便利な場合があります。


1
public static LocalTime time() {
    LocalTime ldt = java.time.LocalTime.now();

    ldt = ldt.truncatedTo(ChronoUnit.MINUTES);
    System.out.println(ldt);
    return ldt;
}

これは私のために働く


0

import java.util.*カレンダーとフォーマッタークラスを使用して、時間と分を取得できます。Calendar cal = Calendar.getInstance()Formatter fmt=new Formatter()と表示時間と分の形式を設定fmt.format("%tl:%M",cal,cal)して印刷System.out.println(fmt) などの出力ショーを10:12

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.