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