Как я могу получить Java TemporalAccessor с миллисекунды с метки времени Epoch?

У меня есть временная метка long, которая составляет миллисекунды с начала эпохи.

Я вызываю сторонний API, который принимает TemporalAccessor.

Как получить одно из другого?

Является ли Instant.ofEpochMilli(timestamp) достаточно правильным, учитывая эпоху UTC?

Какой API вы используете? Какие темпоральные поля ему нужны?

Sweeper 11.11.2022 13:54

«сторонний API» совсем не проясняет ситуацию. У него есть имя? У вас есть ссылки на документацию, в которой объясняются требования к TemporalAccessor, например, какие временные поля необходимо поддерживать?

Sweeper 11.11.2022 13:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это должно быть правильно, если вы получили свой long из эпохи UNIX , то есть с 00:00:00 UTC 1 января 1970 года, например. System.currentTimeMillis , а не какая-то другая эпоха

Из документов на Instant.ofEpochMilli:

Получает экземпляр Instant, используя миллисекунды из эпохи 1970-01-01T00:00:00Z.

Другими словами, он возвращает миллисекунды с эпохи UNIX.

Затем вы можете легко передать экземпляр Instant API, который ожидает TemporalAccessor, поскольку Instant является его реализацией.

Я задал вопрос и принял правильный ответ на заданный вопрос.

Тем не менее, есть связанные проблемы, подразумеваемые, но не заданные в вопросе.

TemporalAccessor — очень общий интерфейс. Многие объекты Java Time API, такие как Instant, LocalDate, LocalTime и т. д., реализуют этот интерфейс. Принимающий код будет иметь ожидания относительно того, какие поля поддерживает конкретный экземпляр TemporalAccessor.

Сторонний API, который я использовал — Stella (https://github.com/mpgirro/stalla) — для создания RSS-каналов просто заявил, что ему нужен TemporalAccessor, хотя на самом деле ему нужен OffsetDateTime.

В моем случае мне нужно было сделать

Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.UTC).toOffsetDateTime()

Вместо Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.UTC).toOff‌​setDateTime() вы можете просто использовать Instant.ofEpochMilli(timestamp).atOffset(ZoneOffset.UTC)

Arvind Kumar Avinash 11.11.2022 15:17

Другие вопросы по теме