Загрузка изображений с заданной ссылкой с использованием Python

public static OffsetDateTime convertFrom(Date source) {
    if (source instanceof Timestamp) {
        return ((Timestamp) source).toLocalDateTime()
                .atOffset(ZoneOffset.UTC);
    }
    return source.toInstant().atOffset(ZoneOffset.UTC);
}

Объект, переданный вашему методу, был java.sql.Timestamp, а не Date. Мы можем видеть этот факт по тому, как он был напечатан: 2018-07-11 15:45:13.0 - это возвращаемое значение из Timestamp.toString(). Класс Timestamp реализуется как подкласс Date, но это не означает, что мы не можем и не должны обрабатывать его как Date. Документация предупреждает нас:

Из-за различий между классом Timestamp и классом java.util.Date, упомянутым выше, рекомендуется, чтобы код не отображал значения Timestamp в качестве экземпляра java.util.Date. Взаимодействие наследования между Timestamp и java.util.Date действительно означает наследование реализации, а не наследование типа.

В реализации выше я предположил, что вы не можете смягчить возможность получения Timestamp аргумент, поэтому я обрабатываю возможность, насколько я могу. Однако код все еще хрупкий, потому что иногда Timestamp обозначает точку во времени (я должен сказать, что это точка), в других случаях она обозначает дату и час дня. Предоставлено, что Timestamp не содержит в нем часового пояса, два не совпадают. Я понимаю, что ваш образец Timestamp обозначает дату и время 2018-07-11 15: 45: 13.0, и вы хотите, чтобы это было интерпретировано в UTC. Мой код делает это (ваш код в вопросе, с другой стороны, правильно обрабатывает ситуацию, когда Timestamp обозначает момент времени). Кроме того, даже если в моем коде не указано никакого часового пояса, его поведение по-прежнему зависит от настройки часового пояса вашего JVM.

Когда я передаю Timestamp из 2018-07-11 15:45:13.0 в мой метод выше, он возвращает OffsetDateTime из 2018-07-11T15:45:13Z.

Двойной характер Timestamp является неудачным и запутанным, и единственным реальным решением было бы, если бы вы могли полностью отказаться от этого класса. Класс Date тоже плохо разработан, и оба устарели и заменены java.time, современным Java-API датой и временем. Если вы не можете избежать старых классов в своем коде, я, безусловно, понимаю ваше желание преобразовать в современную OffsetDateTime первую вещь. Если, с другой стороны, я правильно понимаю, что дата и время проходят через JSON, вы можете проанализировать его на своей стороне без каких-либо старых классов даты и времени, что было бы хорошим решением вашей проблемы. И при любых обстоятельствах, если ваша реальная цель состоит в том, чтобы представить момент времени в нейтральном часовом поясе, я согласен с Базилем Бурком в предпочтении Instant по OffsetDateTime в UTC.

Ссылка : Документация java.sql.Timestamp

0
задан K.Black 19 January 2019 в 09:44
поделиться