是否有更好/更簡單的方法來構造LocalDateTime
對象,代表今天早上6點比這個更早?Java 8 LocalDateTime今天在特定時間
LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0);
不知怎的,我不喜歡應付分/秒/納米當所有我想說的是now().withHours()
。
是否有更好/更簡單的方法來構造LocalDateTime
對象,代表今天早上6點比這個更早?Java 8 LocalDateTime今天在特定時間
LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0);
不知怎的,我不喜歡應付分/秒/納米當所有我想說的是now().withHours()
。
LocalDate
已各種重載atTime
方法,如this one,它接受(白天和分鐘的小時)兩個參數:
LocalDateTime todayAt6 = LocalDate.now().atTime(6, 0);
接受的答案是一個很好的。您也可以創建自己的clock做到這一點:
Clock clock = Clock.tick(Clock.systemDefaultZone(), Duration.ofHours(1));
LocalDateTime dt = LocalDateTime.now(clock);
這可能是一個有用的選項,如果反覆使用,因爲時鐘可以存儲在一個靜態變量:
public static final Clock CLOCK = Clock.tick(Clock.systemDefaultZone(), Duration.ofHours(1));
LocalDateTime dt = LocalDateTime.now(CLOCK);
另一種方法(特別如果你想改變一個已經存在的LocalDateTime
)就是使用with()
method。
它接受TemporalAdjuster
作爲參數。而根據javadoc,傳遞LocalTime
這種方法不正是你所需要的:
的類LOCALDATE的和本地時間實現TemporalAdjuster,因此可以用這個方法來更改日期,時間或偏移:
result = localDateTime.with(date);
result = localDateTime.with(time);
所以,代碼將是:
LocalDateTime todayAt6 = LocalDateTime.now().with(LocalTime.of(6, 0));
到LocalDate.now().atTime(6, 0)
一個替代方案是:
import java.time.temporal.ChronoUnit;
LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).withHour(6);