JDK または Guava に 1 日の時間を表すクラスがありますが、必ずしも特定の日付の特定の時間を表すわけではありませんか? そうでない場合、なぜですか?
3 に答える
JDK 1.3-1.7 では、答えはノーです。閏年や閏月などの頭痛の種に対処する必要がないため、日付よりも 1 日の特定の時刻を計算する方がはるかに簡単です。単純な整数で十分です。SimpleDateFormatter などを使用して時刻をロケール文字列に変換する必要がある場合は、時刻を日付に変換するだけで、日付部分は無視できます。
int time = 8 * 60 + 34; // 8:34 am
Date date = new Date(60000L * time);
タイム ゾーンを +0 にリセットし、日付をフォーマッタに渡します。
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+0"));
sdf.format(date);
a をクラスに単純にラップbyte
し、現在の時間がincrement()
(または適切な名前の) メソッド内で 23byte
を通過するたびに、の値を 0 に設定し、値がdecrement()
(または適切な名前の) メソッドで 0 を下回るたびに、の値byte
を 23 に設定します。
私の知る限り、Hour
(JDKまたはGuavaで)表す特定のクラスはありませんが、特定の時間のインスタンスから時間を取得するための使いやすいクラスがあります(これは、あなたがこれを求めていると私が想定しているものです)質問)。
Paŭlo Ebermann が言及しているように、JODA-Time を使用できますが、それは外部ライブラリです。JDK 内には、Calendar
多くの便利なメソッドを持つ というクラスがあります。
現在の時刻を表すa の時間を取得するにはlong
、次のようにします。
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
int hour = c.get(Calendar.HOUR); //returns 0-11
int hourOfDay = c.get(Calendar.HOUR_OF_DAY); //returns 0-23