Javaで1日の1日についてグレゴリオカレンダーに尋ねてください
-
01-10-2019 - |
質問
グレゴリオカレンダーを使用して、グレゴリオカレンダーの設定関数を使用して特定の日付と時刻をアプリケーションに設定しています。 getTime()メソッドを使用すると、正しい出力が得られますが、hour_of_dayにアクセスしようとすると、間違った数が得られます。
Calendar time = new GregorianCalendar();
time.set(2010, Calendar.JANUARY, 1, 7, 20,0);
hour = time.HOUR_OF_DAY;
minute = time.MINUTE;
時間は11の出力を与え、分は12の値を与えます。
これを修正する方法に関する提案はありますか?ありがとう
解決
コードは、定数に1時間/分を割り当てています。 Calendar.get(int)を呼び出す必要があります。
hour = time.get(Calendar.HOUR_OF_DAY);
minute = time.get(Calendar.MINUTE);
他のヒント
tl; dr
myGregCal
.toZonedDateTime() // Convert from legacy class GregorianCalendar to modern ZonedDateTime.
.getHour() // Get hour-of-day, 0-23.
Java.Time
これらの面倒な古いレガシーデートタイムクラスを置き換えるモダンなJava.Timeクラスでは、はるかに簡単です。
ZonedDateTime
クラスは、ナノ秒の解像度を持つ特定のタイムゾーンのタイムラインの瞬間を表します。
あなたから変換します GregorianCalendar
古いクラスに追加された新しい方法を使用します。
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
または、それなしで新鮮に始めます GregorianCalendar
クラス。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.of( 2010 , Month.JANUARY , 1 , 7 , 20 , 0 , 0 , z );
時刻の部分だけで作業したい場合は、 LocalTime
.
LocalTime localTime = zdt.toLocalTime() ;
整数数と分が本当に必要な場合は、それらのために尋問することができます。
int hour = zdt.getHour();
int minute = zdt.getMinute();
Java.timeについて
Java.Time フレームワークはJava 8以降に組み込まれています。これらのクラスは、厄介な古いものに取って代わります 遺産 次のような日付クラス java.util.Date
, Calendar
, & SimpleDateFormat
.
ジョーダタイム プロジェクト、今 メンテナンスモード, 、への移行をアドバイスします Java.Time クラス。
詳細については、を参照してください Oracleチュートリアル. 。多くの例と説明については、スタックオーバーフローを検索します。仕様はです JSR 310.
Java.Timeクラスはどこで入手できますか?
- Java SE 8 と SE 9 以降
- 組み込み。
- バンドルされた実装を備えた標準Java APIの一部。
- Java 9は、いくつかのマイナーな機能と修正を追加します。
- Java SE 6 と SE 7
- Java.timeの機能の多くは、Java 6と7にバックポートされています Threeten-Backport.
- アンドロイド
- Threetenabp プロジェクトは適応します Threeten-Backport (上記)Androidの場合は具体的に。
- 見る Threetenabpの使用方法….
Threeten-Extra プロジェクトは、追加のクラスでJava.Timeを延長します。このプロジェクトは、Java.timeに将来の追加の可能性の実証済みの基盤です。ここには、いくつかの有用なクラスがあります Interval
, YearWeek
, YearQuarter
, 、 と もっと.