我有两个来自java.time
的{{3}}类的实例,例如:
Instant instant1 = Instant.now();
Instant instant2 = Instant.now().plus(5, ChronoUnit.HOURS);
现在我想检查Instant
的两个实例是否实际上在同一天(日,月和年匹配)。我很容易想到,让我们使用闪亮的新Instant
和通用LocalDate
静态方法:
LocalDate localdate1 = LocalDate.from(instant1);
LocalDate localdate2 = LocalDate.from(instant2);
if (localdate1.equals(localdate2)) {
// All the awesome
}
除了通用from
方法不是那么普遍,Java在运行时抱怨异常:
java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: 2014-11-04T18:18:12Z of type java.time.Instant
让我回到1号广场。
如果Instant
的两个实例实际上具有相同的日期(具有相同的日,月和年),建议/最快的方法是什么?
答案 0 :(得分:14)
Instant类不适用于人类时间单位,例如 年,月或日。如果你想在那些中执行计算 单位,你可以将一个瞬间转换为另一个类,例如 LocalDateTime或ZonedDateTime,通过将Instant与时间绑定 区。然后,您可以按所需的单位访问该值。
http://docs.oracle.com/javase/tutorial/datetime/iso/instant.html
因此我建议使用以下代码:
LocalDate ld1 = LocalDateTime.ofInstant(instant1, ZoneId.systemDefault()).toLocalDate();
LocalDate ld2 = LocalDateTime.ofInstant(instant2, ZoneId.systemDefault()).toLocalDate();
if (ld1.isEqual(ld2)) {
System.out.println("blubb");
}
或者你可以使用
instant.atOffset(ZoneOffset.UTC).toLocalDate();