Получение часов и минут в Java: альтернатива deprecated

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для получения текущего времени по часам и минутам из объекта Date в Java, следует использовать класс Calendar. Методы getHours() и getMinutes() класса Date считаются устаревшими и их использование не рекомендуется. Пример кода для получения часов и минут:

Java
Скопировать код
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-часовой.

Кинга Идем в IT: пошаговый план для смены профессии

Java 8 и пакет java.time

Начиная с версии Java 8, доступен пакет java.time, который значительно упрощает работу с датами и временем:

Java
Скопировать код
LocalDateTime now = LocalDateTime.now();
int hours = now.getHour(); // Сколько сейчас времени по часам?
int minutes = now.getMinute(); // Сколько сейчас времени по минутам?

Эволюция Java: этот пакет соответствует стандарту ISO-8601 и минимизирует вероятность ошибок, связанных с часовыми поясами, например, при путанице в часах звонка друзьям в Австралию.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Часовые пояса? Без проблем!

Пакет java.time включает в себя класс ZonedDateTime, который облегчает работу с различными часовыми поясами:

Java
Скопировать код
ZonedDateTime zonedNow = ZonedDateTime.now();
int zoneAwareHours = zonedNow.getHour(); // Учет часового пояса при определении текущего времени по часам
int zoneAwareMinutes = zonedNow.getMinute(); // Учет часового пояса при определении текущего времени по минутам

Для исключения ошибок всегда указывайте часовой пояс:

Java
Скопировать код
ZonedDateTime zonedNowInParis = ZonedDateTime.now(ZoneId.of("Europe/Paris")); // Доброе утро, Париж!

Путешествие во времени с ThreeTen-Extra

Проект ThreeTen-Extra представляет собой расширение java.time, которое добавляет дополнительные возможности для работы с временем:

Java
Скопировать код
LocalDateTime tomorrow = LocalDateTime.now().plusDays(1);

Избегаем устаревших методов

В старых версиях кода можно встретить использование методов Date.getHours() и Date.getMinutes(). Рекомендуется переход на java.time или использование Joda-Time, если вы не используете Java 8:

Java
Скопировать код
int hours = oldDate.getHours();
int minutes = oldDate.getMinutes();
// Несмотря на то, что вполне работоспособно, лучше использовать современные решения.

Совместимость с JDBC 4.2+

Использование java.time упрощает работу с драйверами, поддерживающими JDBC 4.2+:

Java
Скопировать код
LocalDateTime dbDateTime = resultSet.getObject("column_name", LocalDateTime.class);
// Работа с базой данных стала еще удобнее.

Данный прямой подход снижает вероятность ошибок и упрощает код.

Особенности работы с месяцами

Важно помнить, что класс Calendar начинает отсчет месяцев с нуля. Поэтому при работе с месяцами добавляйте к полученному значению единицу:

Java
Скопировать код
int month = cal.get(Calendar.MONTH) + 1; // Запомните эту особенность, чтобы избежать ошибок.

Это избавит от ошибок, вызванных неверным индексированием месяцев.

Сравниваем 24-часовой и 12-часовой форматы с использованием Calendar

Класс Calendar поддерживает работу как с 24-часовым, так и с 12-часовым форматами времени:

Java
Скопировать код
int hours24 = cal.get(Calendar.HOUR_OF_DAY); // 24-часовой формат времени
int hours12 = cal.get(Calendar.HOUR); // 12-часовой формат времени

Правильное понимание этой особенности избавит вас от путаницы в форматах времени.

Визуализация

Получение времени по часам и минутам может быть очень простым:

Java
Скопировать код
Date currentTime = new Date();  // Текущее время, например, 10:15
int hours = currentTime.getHours();     // Часы – 10
int minutes = currentTime.getMinutes(); // Минуты – 15

Просто представьте себе циферблат:

  • ЧАСОВАЯ СТРЕЛКА соответствует getHours()
  • МИНУТНАЯ СТРЕЛКАgetMinutes()

Таким образом вы получаете компоненты времени, интерпретируя их как на аналоговых часах.

Преодоление ограничений Date

Использование объекта Date не рекомендуется из-за его устаревших методов. Calendar предлагает более прогрессивный и удобный подход:

Java
Скопировать код
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 продолжит быть вашим помощником:

Java
Скопировать код
DateTime now = new DateTime();
int hours = now.getHourOfDay();
int minutes = now.getMinuteOfHour();

Совет: Оставайтесь с Joda-Time до перехода на Java 8 или выше.

Полезные материалы

  1. LocalDateTime (Java Platform SE 8 ) — Подробное руководство по API LocalDateTime.
  2. Java SE 8 Date and Time — Руководство Oracle по работе с датой и временем в Java 8.
  3. Java 8 – New Date/Time API — Инструкция о пакете java.time.
  4. datetime – How can I parse/format dates with LocalDateTime? (Java 8) – Stack Overflow — Обсуждение парсинга и форматирования дат с использованием LocalDateTime на Stack Overflow.
  5. A Deeper Look into the Java 8 Date and Time API – DZone — Глубокий разбор API даты и времени в Java 8 на DZone.