首页 > 解决方案 > 找不到类型的即时转换器:java.time.ZonedDateTime

问题描述

我正在尝试从范围中获取下/上端点,当涉及到获取这些下/上端点时,它会引发如下异常:

java.lang.IllegalArgumentException: No instant converter found for type: java.time.ZonedDateTime

    at org.joda.time.convert.ConverterManager.getInstantConverter(ConverterManager.java:166)
    at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:171)
    at org.joda.time.DateTime.<init>(DateTime.java:257)

编码:

@Override
    public WeatherStatus getForecastForFlightOverall(String icao, ... flight) {

       ...

        if ( flightmapIntegration.isMetIntegrationEnabled() ) {
            List<ViewFlightAirportDTO> airports = getRoutes(icao, flight);
            Range<ZonedDateTime> range = getRange(airports);

            DateTime from = range.lowerEndpoint() == null ? null : new DateTime(range.lowerEndpoint());
            ...

            try {
               ....
            }
        }

        return status != null ? status : WeatherStatus.UNKNOWN;
    }

获取范围方法:

 private Range<ZonedDateTime> getRange(List<...> ...) {

        if ( ....isEmpty() ) {
            return Range.singleton(ZonedDateTime.now());
        }

        Range<ZonedDateTime> result = validityRangeOf(....get(0));

        for (int i = 1; i < flightAirports.size(); i++) {
            result = ...
        }

        return result;
    }

有效范围方法:

private Range<ZonedDateTime> validityRangeOf(ViewFlightAirportDTO firstAirport) {
        return Range.closed(firstAirport.getValidFrom(), firstAirport.getValidTill());
    }

编辑我可以这样做,但不知道如何完成它。我的意思是 from/to 也可以是 ZonedDateTime 的类型,但我不知道如何使用下/上端点创建它的对象

   ZonedDateTime from = range.lowerEndpoint() == null ? null : new ZonedDateTime(...);
            ZonedDateTime to = ...

标签: javadatedatetimejodatimezoneddatetime

解决方案


您当前正尝试通过直接调用构造函数来转换ZonedDateTimefrom DateTime

ZonedDateTime zonedDateTime = ZonedDateTime.now();
DateTime dateTime = new DateTime(zonedDateTime); // will cause IllegalArgumentException

您需要调用不同的构造函数来进行此转换:

DateTimeZone dateTimeZone = DateTimeZone.forID(zonedDateTime.getZone().getId()); // extract DateTimeZone separately
new DateTime(zonedDateTime.toInstant().toEpochMilli(), dateTimeZone); // convert using epoch milliseconds

这将允许您进行此转换。


推荐阅读