java.time
Java 8 и более поздние версии теперь включают фреймворк java.time . Вдохновленный Joda-Time , определяемым JSR 310 , расширенным проектом ThreeTen-Extra . См. Учебное пособие .
Эта структура заменяет старые классы java.util.Date/.Calendar. Методы преобразования позволяют вам конвертировать туда и обратно для работы со старым кодом, еще не обновленным для типов java.time.
Основные классы:
Эта структура решает пару проблем, которые вы перечислили.
0 основанных месяцев
Месяц номера 1-12 в java.time.
Еще лучше, Enum
(Month
) предоставляет экземпляр объекта для каждого месяца года. Поэтому вам не нужно зависеть от «магических» чисел в вашем коде, таких как 9
или 10
.
if ( theMonth.equals ( Month.OCTOBER ) ) { …
Кроме того, это перечисление включает некоторые удобные служебные методы, такие как получение локализованного имени месяца.
Если вы еще не знакомы с перечислениями Java, прочитайте учебник и изучите его. Они удивительно удобны и мощны.
Дата без времени
Класс LocalDate
представляет значение только для даты, без времени суток, без часового пояса.
LocalDate localDate = LocalDate.parse( "2015-01-02" );
Обратите внимание, что для определения даты требуется часовой пояс. В Париже новый день наступает раньше, чем в Монреале, где он все еще «вчера». Класс ZoneId
представляет часовой пояс.
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
Аналогично, существует класс LocalTime
для времени суток, еще не привязанного к дате или часовому поясу.
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , в настоящее время находящийся в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Руководство по Oracle . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .