2016-04-28 136 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);