2016-02-07 2 views
13

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

Когда я предпочитаю друг друга?

ответ

12

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

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

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

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

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

+3

Чем кажется, что Мгновен больше подходит для использования в большинстве потоков. И только тогда, когда мне нужно представить информацию пользователю, я сделаю преобразование: LocalDateTime.ofInstant (instantValue, ZoneOffset.UTC) (я должен сделать это, потому что невозможно извлечь конкретные компоненты даты и времени, например, час или день, напрямую из Мгновенного типа) – galbarm

+0

Да, это имело бы смысл. – assylias