こんにちは私はAndroidOSに移植するための教師用ユーティリティを作成しようとしています。しかし、私は少し問題にぶつかっています。Periodというクラスを作成したいと思います。このクラスには、その期間の開始時刻と終了時刻が含まれます。すなわち。期間1は7:45に開始し、8:45に終了します。また、期間の残り時間の方法も欲しいです。たとえば、現在は8:10で、残り35分です。System.currentTimeMillis()から現在の時刻を取得できます。ただし、期間の開始時刻と終了時刻を保存するための最良の方法を見つけるのに苦労しています。JavaのCalendarクラスを調べましたが、時間は常に日付と時間に関連付けられているようです。期間の終了時刻は、特定の1つの日付だけでなく、複数の日に発生するため、これは私のアプリケーションにとっては意味がないようです。これを理解する助けは大きな助けになるでしょう。皆さんありがとう
5 に答える
期間の開始時刻と終了時刻を現在の時刻と比較できるようにすることが目標である場合は、今日の期間の境界の日付と時刻を計算する方法が必要です。
したがって、今日のCalendarインスタンスを取得し、その時刻を7:45に設定して、カレンダーの時刻を現在の時刻と比較します(もちろん、上限についても同じです)。
各境界を表すには、時間にintを使用し、分に2番目のintを使用するだけです。
Calendarは、ほとんど非推奨の関数を持つクラスDateのラッパーの王様です。JodoTime APIは、2つのタイムスタンプを比較するのに最適だと聞きました(http://joda-time.sourceforge.net/)。
期間の開始時刻と終了時刻を保存する1つの方法は、日付のArrayListをインスタンス化して、任意の時刻をレッスン期間と比較できるようにすることです。
JodaTimeライブラリをチェックしてください。DateTime オブジェクトには必要なものがあります。
私が知る限り、時刻は最後の真夜中からの秒数 (オプションでミリ秒) として保存する必要があります。したがって、周期 1 の 7.45 は 45*60 (45 分 * 1 分あたり 60 秒) + 7*60*60 (7 時間 x 分 x 秒!) = 2 700 + 25 200 = 27 900で始まります。
終了日についても同じ計算を行います。開始日と終了日が同じである限り、差を簡単に差し引いて、その間の間隔を取得できます。それらが同じ日に発生しない場合、Java の時刻と日付のクラスはどちらも優れており、必須です。これらのクラスは基本的に同じアルゴリズムで動作しますが、「最後の午前 0 時」からの秒数はカウントせず、代わりに UNIX エポック時間 (1970 年 1 月 1 日) からのミリ秒数をカウントします。
JodaTimeを見てください。