Мгновенный vs LocalDateTime - Когда вы предпочитаете один за другим

Мне нужно сохранить и представить дату и время событий, которые произошли на моем сервере в UTC. У меня есть возможность использовать Instant.now() или LocalDateTime.now(ZoneOffset.UTC)

Когда я должен отдать предпочтение одному другому?

Ответы

Ответ 1

Это зависит от того, что вы хотите делать с данными. Оба типа концептуально отличаются друг от друга.

Представьте, что событие произошло в 8 часов UTC.

После того, как у вас есть LocalDateTime, вы потеряли информацию о часовом поясе, и она может быть технически находиться в любом часовом поясе - так, возможно, 8 утра по UTC или 8 утра по восточному времени (= 1pm UTC). Это означает, что вам нужно "знать", что ваша конвенция гласит, что LocalDateTime на самом деле является моментом UTC.

Если вы используете Мгновенное действие, вы точно знаете, на какой момент времени ссылаетесь, независимо от часовых поясов, и не нуждаются в внешнем "знании" или согласии. Однако у вас нет информации о часовом поясе, так что вы не знаете, является ли это 8-часовое время Великобритании в 9 утра по ЦЭТ или 3 утра EST (но все они представляют тот же момент времени).

Наконец, если вам нужен как момент времени, так и с какой часовой зоной он должен быть связан, вы можете использовать ZonedDateTime или OffsetDateTime, которые будут иметь информацию о часах и часовом поясе.