2016-04-28 106 views
7

是否有更好/更簡單的方法來構造LocalDateTime對象,代表今天早上6點比這個更早?Java 8 LocalDateTime今天在特定時間

LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0); 

不知怎的,我不喜歡應付分/秒/納米當所有我想說的是now().withHours()

回答

15

LocalDate已各種重載atTime方法,如this one,它接受(白天和分鐘的小時)兩個參數:

LocalDateTime todayAt6 = LocalDate.now().atTime(6, 0); 
3

接受的答案是一個很好的。您也可以創建自己的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); 
1

另一種方法(特別如果你想改變一個已經存在的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)); 
0

LocalDate.now().atTime(6, 0)一個替代方案是:

import java.time.temporal.ChronoUnit; 

LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).withHour(6);