有没有办法确定传递对象的时间类型?当前,我有一个Temporal参数,该参数将Temporal转换为LocalDate并返回LocalDate对象。

假设我在此LocalDateTime参数中传递了Temporal,则该方法将引发异常。

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

最佳答案

我不知道您是如何转换为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)

09-11 19:47