Java годы между 2 инстансами
В Joda мы можем рассчитать годы между 2 Datetime, используя
Years.between(dateTime1, dateTime2);
Есть ли простой способ найти годы между двумя моментами, используя java.time
API вместо этого без особой логики?
ChronoUnit.YEARS.between(instant1, instant2)
терпит неудачу:
Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years
at java.time.Instant.until(Instant.java:1157)
at java.time.temporal.ChronoUnit.between(ChronoUnit.java:272)
...
1 ответ
Число лет между двумя моментами считается неопределенным (по-видимому - я был удивлен этим), но вы можете легко преобразовать моменты в ZonedDateTime
и получить полезный результат:
Instant now = Instant.now();
Instant ago = Instant.ofEpochSecond(1234567890L);
System.out.println(ChronoUnit.YEARS.between(
ago.atZone(ZoneId.systemDefault()),
now.atZone(ZoneId.systemDefault())));
Печать:
8
Я подозреваю, что причина, по которой вы не можете напрямую сравнивать моменты, состоит в том, что местоположение границы года зависит от часового пояса. Это означает, что ZoneId.systemDefault()
может быть не то, что вы хотите! ZoneOffset.UTC
было бы разумным выбором, в противном случае, если есть часовой пояс, который является более значимым в вашем контексте (например, часовой пояс пользователя, который увидит результат), вы бы хотели использовать его.