私は起床時間が7:45です。これは現地時間だったとき、私は私のコードは、時間の前の瞬間を返すようにしたい特定の時刻に前の瞬間を取得する
私はこれを行うことができます知っている(つまり、前の起床時間を。):
LocalTime wakeUpTime = LocalTime.of(7, 45);
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime todaysWakeUpTime = now.with(wakeUpTime);
ZonedDateTime lastWakeUpTime;
if(todaysWakeUpTime.isAfter(now)){
// e.g. it is now 4:30, so wake-up is still to come,
// return the one from yesterday
lastWakeUpTime = todaysWakeUpTime.minusDays(1);
} else {
// e.g. it is now 11:30, so wake-up for today is already past
lastWakeUpTime = todaysWakeUpTime;
}
System.out.println(lastWakeUpTime);
クリーナーバージョンがあります、例えば時間的なアジャスターを使って、意図をより良く伝える(これらの時間の最後を得る)?コードがように読み取ることができます
あなたがする必要はありませんので、クリーンな方法は、組み込みの機能を持つことになります自分でコード全体を書いてください。もちろん、アジャスターを作成して再利用することもできます(ただし、一時的なアジャスターを含むクラス/メソッドの名前を注意してください。そうしないと、この問題はすべての静的ヘルパークラス/ツールに内在しているため、 。サイドノート:私のタイムライブラリTime4Jはすでにこの機能を(コンパイル時のタイプセーフでも)このボックスでサポートしています。この[要点例](https://gist.github.com/MenoData/4384d9a6d2209a6c5ac8ca4f0cc69bb7) –