Java 8 New Date/Time API - Часть 6

FacebooktwittertumblrFacebooktwittertumblr

Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 8.

1. Введение

В предыдущей статье мы рассмотрели работу даты и времени с временными зонами в Java 8. В этой статье мы узнаем что такое Period и Duration, а так же поймем зачем оно нам нужно.

2. Period

Period указывает временной промежуток между двумя датами. Допустим, вам понадобилось узнать сколько осталось дней до дня рождения пользователя

Можно предположить, что getDays() вернет количество дней до дня рождения. Так и будет, в буквальном смысле, ТОЛЬКО количество дней до дня рождения. Вывод в консоль ->

Для того, чтобы вывести кол-во дней нормально, придется смотреть сколько дней в конкретном месяце, считать их самому и т.д.

Проще говоря, для такой задачи Period не очень подходит. Плюс ко всему с Period можно "переборщить"

Почему так??? Дело в том, что Period не имеет ограничений по количеству месяцев, дней. Но эту ситуацию можно немного  исправить, для этого существует метод normalized()

Количество дней никак не станет 30, 31, или 29. Ведь продолжительность не привязана к месяцам. Но если мы добавим Period к дате, все встанет на свои места.

3. Duration

Duration, по сути, исполняет ту же роль, что и Period но измеряет все в часах, минутах, секундах ...

Вот с помощью Duration можно решить нашу проблему с днём рождения, правда с маленькой хитростью.

Duration не работает с LocalDate, зато с LocalDateTime еще как. Преобразовав одно в другое с помощью метода atStartOfDay(), мы можем получить Duration, а уже у него получить количество дней.

Конечно, можно пойти путем еще проще, используя класс ChronoUnit

Что еще раз доказывает - существует множество вариантов решения одной и той же задачи, не все из них хороши, не все так изящны, но чем больше вариантов вы знаете, тем больше возможностей у вас есть. Поэтому развивайтесь, узнавайте новое и Never Give Up

А в следующей статье мы рассмотрим TemporalAdjuster. Спасибо, что были с нами 🙂

FacebooktwittertumblrFacebooktwittertumblr

FacebooktwittertumblrFacebooktwittertumblr
Самоучители--узнать детальнее--