Получение часов и минут в Java: альтернатива deprecated
Быстрый ответ
Для получения текущего времени по часам и минутам из объекта Date
в Java, следует использовать класс Calendar
. Методы getHours()
и getMinutes()
класса Date
считаются устаревшими и их использование не рекомендуется. Пример кода для получения часов и минут:
Calendar cal = Calendar.getInstance();
cal.setTime(date); // подставьте ваш объект Date вместо 'date'
int hours = cal.get(Calendar.HOUR_OF_DAY); // Получение времени в 24-часовом формате
int minutes = cal.get(Calendar.MINUTE);
Примечание: Calendar.HOUR
отвечает за 12-часовой формат, а Calendar.HOUR_OF_DAY
— за 24-часовой.
Java 8 и пакет java.time
Начиная с версии Java 8, доступен пакет java.time, который значительно упрощает работу с датами и временем:
LocalDateTime now = LocalDateTime.now();
int hours = now.getHour(); // Сколько сейчас времени по часам?
int minutes = now.getMinute(); // Сколько сейчас времени по минутам?
Эволюция Java: этот пакет соответствует стандарту ISO-8601 и минимизирует вероятность ошибок, связанных с часовыми поясами, например, при путанице в часах звонка друзьям в Австралию.
Часовые пояса? Без проблем!
Пакет java.time
включает в себя класс ZonedDateTime
, который облегчает работу с различными часовыми поясами:
ZonedDateTime zonedNow = ZonedDateTime.now();
int zoneAwareHours = zonedNow.getHour(); // Учет часового пояса при определении текущего времени по часам
int zoneAwareMinutes = zonedNow.getMinute(); // Учет часового пояса при определении текущего времени по минутам
Для исключения ошибок всегда указывайте часовой пояс:
ZonedDateTime zonedNowInParis = ZonedDateTime.now(ZoneId.of("Europe/Paris")); // Доброе утро, Париж!
Путешествие во времени с ThreeTen-Extra
Проект ThreeTen-Extra представляет собой расширение java.time
, которое добавляет дополнительные возможности для работы с временем:
LocalDateTime tomorrow = LocalDateTime.now().plusDays(1);
Избегаем устаревших методов
В старых версиях кода можно встретить использование методов Date.getHours()
и Date.getMinutes()
. Рекомендуется переход на java.time
или использование Joda-Time, если вы не используете Java 8:
int hours = oldDate.getHours();
int minutes = oldDate.getMinutes();
// Несмотря на то, что вполне работоспособно, лучше использовать современные решения.
Совместимость с JDBC 4.2+
Использование java.time
упрощает работу с драйверами, поддерживающими JDBC 4.2+:
LocalDateTime dbDateTime = resultSet.getObject("column_name", LocalDateTime.class);
// Работа с базой данных стала еще удобнее.
Данный прямой подход снижает вероятность ошибок и упрощает код.
Особенности работы с месяцами
Важно помнить, что класс Calendar
начинает отсчет месяцев с нуля. Поэтому при работе с месяцами добавляйте к полученному значению единицу:
int month = cal.get(Calendar.MONTH) + 1; // Запомните эту особенность, чтобы избежать ошибок.
Это избавит от ошибок, вызванных неверным индексированием месяцев.
Сравниваем 24-часовой и 12-часовой форматы с использованием Calendar
Класс Calendar
поддерживает работу как с 24-часовым, так и с 12-часовым форматами времени:
int hours24 = cal.get(Calendar.HOUR_OF_DAY); // 24-часовой формат времени
int hours12 = cal.get(Calendar.HOUR); // 12-часовой формат времени
Правильное понимание этой особенности избавит вас от путаницы в форматах времени.
Визуализация
Получение времени по часам и минутам может быть очень простым:
Date currentTime = new Date(); // Текущее время, например, 10:15
int hours = currentTime.getHours(); // Часы – 10
int minutes = currentTime.getMinutes(); // Минуты – 15
Просто представьте себе циферблат:
- ЧАСОВАЯ СТРЕЛКА соответствует
getHours()
- МИНУТНАЯ СТРЕЛКА –
getMinutes()
Таким образом вы получаете компоненты времени, интерпретируя их как на аналоговых часах.
Преодоление ограничений Date
Использование объекта Date
не рекомендуется из-за его устаревших методов. Calendar
предлагает более прогрессивный и удобный подход:
Date currentTime = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(currentTime);
int hours = cal.get(Calendar.HOUR_OF_DAY); // Теперь все под контролем
int minutes = cal.get(Calendar.MINUTE);
Скажем "нет" устаревшим практикам и сомнительным настройкам по умолчанию.
Для фанатов Joda-Time
Если вы еще не перешли на Java 8 или выше, Joda-Time продолжит быть вашим помощником:
DateTime now = new DateTime();
int hours = now.getHourOfDay();
int minutes = now.getMinuteOfHour();
Совет: Оставайтесь с Joda-Time до перехода на Java 8 или выше.
Полезные материалы
- LocalDateTime (Java Platform SE 8 ) — Подробное руководство по API LocalDateTime.
- Java SE 8 Date and Time — Руководство Oracle по работе с датой и временем в Java 8.
- Java 8 – New Date/Time API — Инструкция о пакете java.time.
- datetime – How can I parse/format dates with LocalDateTime? (Java 8) – Stack Overflow — Обсуждение парсинга и форматирования дат с использованием LocalDateTime на Stack Overflow.
- A Deeper Look into the Java 8 Date and Time API – DZone — Глубокий разбор API даты и времени в Java 8 на DZone.