У меня есть временная метка long, которая составляет миллисекунды с начала эпохи.
Я вызываю сторонний API, который принимает TemporalAccessor.
Как получить одно из другого?
Является ли Instant.ofEpochMilli(timestamp) достаточно правильным, учитывая эпоху UTC?
«сторонний API» совсем не проясняет ситуацию. У него есть имя? У вас есть ссылки на документацию, в которой объясняются требования к TemporalAccessor, например, какие временные поля необходимо поддерживать?




Это должно быть правильно, если вы получили свой 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).toOffsetDateTime() вы можете просто использовать Instant.ofEpochMilli(timestamp).atOffset(ZoneOffset.UTC)
Какой API вы используете? Какие темпоральные поля ему нужны?