TLを、DR
Instant.parse("2016-12-23T01:23:45Z")
.plusNanos(Math.round(
yourNumberOfMinutesAsDouble *
TimeUnit.MINUTES.toNanos(1))
)
は古い日時のクラスを避けてください。
実際には、java.util.Date
もjava.util.Calendar
も使用しないでください。これらの古いレガシークラスは、非常に面倒で、混乱し、欠陥があることで知られています。 java.timeクラスに置き換えられました。
古いクラスの場合、Answer by Jireugiは正しいです。 java.timeクラスについては、を参照してください。経過時間を表すためにdouble
かDouble
を使用して良いアイデア経過時間
を小数を使用していない
は避けてください。第1に、そのタイプは、実行速度の精度を犠牲にするfloating-point技術を使用する。したがって、小数点以下の桁数に余分な余分な数字が付くことがよくあります。
第2に、これは、60秒から60分、60分から1時間というように、時間を処理するのは難しい方法です。
ナノ秒
を私たちは、経過時間を分単位としてDouble
で作業しなければならない場合は、のは、全体の数(整数)にあなたの端数進数から変換してみましょう。
古いレガシーの日時クラスは、ミリ秒の分解能に制限されていますが、java.timeクラスは、ナノ秒ほど細かくなることがあります。したがって、Double
をナノ秒の整数に変換したいと考えています。
この計算では、分単位でナノ秒数のマジックナンバーをハードコードするのではなく、TimeUnit
列挙型を使用してみましょう。そのクラスは、私たちのために1分でナノ秒の数を計算することができます(60 * 1_000_000_000L)。
最後に、Math.round
関数は、負の無限大に四捨五入して、引数に最も近いlongを返します。
long nanoseconds = Math.round(
yourNumberOfMinutesAsDouble *
TimeUnit.MINUTES.toNanos(1)
);
Instant
UTCに日時の値を扱う場合
は、
Instant
クラスを使用します。各
Instant
はタイムライン上の瞬間を
UTCに表し、解像度は
nanosecondsです。むしろあなたの経過時間として
Double
周りを渡すよりも
Instant Instant.parse("2016-12-23T01:23:45Z")
Instant future = Instant.plusNanos(nanoseconds);
Duration
、私は強くあなたの周りDuration
オブジェクトを渡す示唆しています。
Duration duration = Duration.ofNanos(Math.round(yourNumberOfMinutesAsDouble * TimeUnit.MINUTES.toNanos(1)));
あなたは、このようなplus
とminus
などDuration
で数学を行うことができます。
Instant instant = Instant.parse("2016-12-23T01:23:45Z")
Instant future = instant.plus(duration);
あなたは単にtoString
を呼び出すことによって、このようなPT8H6M12.345S
などの標準的なISO 8601形式でDuration
の文字列表現を生成することができます。そして、Duration
はそのような文字列も同様に解析できます。
String output = duration.toString(); // PT8H6M12.345S
...または他の方向に行く...
Duration duration = Duration.parse("PT8H6M12.345S");
は、なぜあなたは正確にあなたが望むものを表して独自のクラスを作成しないでください。 –
わかりません。 – Chopin
多分私は分かりません。日付は 'time'のためのものです - 距離は時間と何が関係していますか?日付と距離を保存する場合は、DateフィールドとDoubleフィールドを持つクラスを作成します。 –