Java 8 如何为特定日期创建Java8时钟

Java 8 如何为特定日期创建Java8时钟,java-8,java-time,Java 8,Java Time,关于依赖日期的单元测试,我正在找出为特定日期创建Java8时钟的正确方法。根据中提出的方法,我正在尝试这种方法。然而,我并没有意识到要做到这一点的捷径 这是为特定日期创建Java8时钟的正确且最好的方法吗 第2版(根据和的建议) 版本1 为什么不使用这个:now.atStartOfDay().toInstant(ZoneOffset.UTC)创建即时消息?另一方面,LocalDate不处理小时/分钟/秒。。我建议您使用LocalDateTime或ZoneDateTime时钟的设计目的不是产生日历

关于依赖日期的单元测试,我正在找出为特定日期创建Java8时钟的正确方法。根据中提出的方法,我正在尝试这种方法。然而,我并没有意识到要做到这一点的捷径

这是为特定日期创建Java8时钟的正确且最好的方法吗

第2版(根据和的建议) 版本1
为什么不使用这个:
now.atStartOfDay().toInstant(ZoneOffset.UTC)创建即时消息?另一方面,LocalDate不处理小时/分钟/秒。。我建议您使用
LocalDateTime
ZoneDateTime
时钟的设计目的不是产生日历日期,而是产生一个瞬间。如果您只想为日历日期提供一个注入机制,那么您可以考虑接口<代码> java .UTI.Falue.Buffue/Cuff>。否则,在<代码>时钟< /代码> -实现时,你必须考虑时区效应,即指定你想要的那个明确的时区,否则你的“固定”时钟将不会真正被固定。@ MeNoHooChsId将在创建时钟实例时考虑时区,并更新辅助函数<代码>时钟()。
utcClockOf()
@MiguelGamboa我想你可能错过了你的领域语言中的一些东西。有一个OO原则:“告诉,不要问”。将
偏移量传递给
atstartoday
而不是
toInstant
private static Clock utcClockOf(int year, int month, int day) {
    ZoneOffset offset = ZoneOffset.UTC;
    Instant inst = LocalDate
            .of(year, month, day)
            .atStartOfDay(offset)
            .toInstant();
    return Clock.fixed(inst, offset.normalized());
}
static Clock clockOf(int year, int month, int day) {
    LocalDate now = LocalDate.of(year, month, day);
    long days = now.toEpochDay();
    long secs = days*24*60*60;
    Instant inst = Instant.ofEpochSecond(secs);
    return Clock.fixed(inst, ZoneId.systemDefault());
}