从传递的对象中获取正确的时间类型

Get correct temporal type from passed object

有没有办法确定传递对象的时间类型?目前我有一个 Temporal 参数,可以将 Temporal 变成 LocalDate 和 returns LocalDate 对象。

假设我在这个 Temporal 参数中传递一个 LocalDateTime,该方法将引发异常。

有没有办法找出传递时间的类型?

我不知道你是如何转换成 LocalDate 的。我相信这个有效。

/**
 * @throws DateTimeException if the <code>Temporal</code> hasn’t got
 * enough supported fields for a <code>LocalDate</code>.
 */
public static LocalDate convertToLocalDate(Temporal t) {
    return LocalDate.from(t);
}

接受LocalDateTime没有问题:

    LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Qyzylorda"));
    System.out.println("As LocalDate: " + convertToLocalDate(ldt));

当我 运行 这段代码时,我得到了这个输出:

As LocalDate: 2020-03-13

当然,它根本不适用于任何 Temporal

    convertToLocalDate(Year.of(2021));
Exception in thread "main" java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: 2021 of type java.time.Year
  at java.base/java.time.LocalDate.from(LocalDate.java:396)
  at com.ajax.Demo.convertToLocalDate(ConvertTemporalToLocalDate.java:18)
  at com.ajax.Demo.main(ConvertTemporalToLocalDate.java:25)