java.time.LocalDate против Instant для «деловой даты» - PullRequest
0 голосов
/ 03 июня 2019

Я хочу представить «деловую дату», например, транзакцию, которая произошла «3 июня 2019 года».Мы активно игнорируем часовые пояса для этой цели, прекрасно понимая, что «3 июня 2019 года» в Японии может быть «2 июня 2019 года» в США, и порядок заказов в течение «дня» также не имеет значения.Все даты будут сегодня или предшествующими датами.

Мой очевидный ответ - это LocalDate.Однако кто-то еще предположил, что это было бы лучше представить как Instant из 2019-06-03T00:00:00.000Z.

Помимо различных вызовов, которые мы должны сделать при преобразовании / форматировании в удобочитаемые даты в пользовательском интерфейсеЕсть ли на самом деле какие-либо различия между двумя подходами?

Это другой вопрос к В чем разница между Instant и LocalDateTime? , потому что время не имеет отношения к этому вопросу, и оно относится только кпрошлые (или текущие) даты.

1 Ответ

4 голосов
/ 03 июня 2019

Однажды я работал над продуктом, в котором мы допустили ошибку, указав дату рождения как мгновение.

Это была одна из тех «крошечных» ошибок проектирования, с которыми мы все еще сталкивались годы.

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

Момент - это точка на временной шкале; локальная дата - это диапазон раз (и не является четко определенным интервалом времени, в том смысле, что она может представлять разные диапазоны моментов в разных часовых поясах). Они представляют разные вещи.

Если вы хотите представить дату, сохраните дату . И я не имею в виду java.util.Date, что действительно мгновенно.

Используйте LocalDate.

...