質問

グレゴリオカレンダーを使用して、グレゴリオカレンダーの設定関数を使用して特定の日付と時刻をアプリケーションに設定しています。 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クラスはどこで入手できますか?

Threeten-Extra プロジェクトは、追加のクラスでJava.Timeを延長します。このプロジェクトは、Java.timeに将来の追加の可能性の実証済みの基盤です。ここには、いくつかの有用なクラスがあります Interval, YearWeek, YearQuarter, 、 と もっと.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top