Спроси Грегорианский календарь на час дня в Java
-
01-10-2019 - |
Вопрос
Я использую григорианский календарь для установки конкретной даты и времени на приложение с использованием установленного функции Gregorian Calendar. Когда я использую метод GetTime (), он дает мне правильный вывод, однако, когда я пытаюсь получить доступ к часу_of_day и минуту, он дает неправильный номер.
Calendar time = new GregorianCalendar();
time.set(2010, Calendar.JANUARY, 1, 7, 20,0);
hour = time.HOUR_OF_DAY;
minute = time.MINUTE;
Час дает вывод 11 и минуту дает значение 12.
Любые предложения о том, как это исправить? Спасибо
Решение
Ваш код просто назначает час / минуту для констант. Вам нужно позвонить в Calendar.get (int):
hour = time.get(Calendar.HOUR_OF_DAY);
minute = time.get(Calendar.MINUTE);
Другие советы
TL; доктор
myGregCal
.toZonedDateTime() // Convert from legacy class GregorianCalendar to modern ZonedDateTime.
.getHour() // Get hour-of-day, 0-23.
Java.Time.
Намного проще с современными классами Java.Time, которые заменяют эти неприятные старые устаревшие классы даты времени.
То ZonedDateTime
Класс представляет собой момент на временной шкале в определенном часовом поясе с разрешением наносекундов.
Конвертировать из вашего GregorianCalendar
Использование новых методов, добавленных в старые классы.
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
Или начать свежим без GregorianCalendar
сорт.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.of( 2010 , Month.JANUARY , 1 , 7 , 20 , 0 , 0 , z );
Если вы хотите работать только с дневной частью, извлечь LocalTime
.
LocalTime localTime = zdt.toLocalTime() ;
Если вы действительно хотите целое число часов и минут, вы можете допросить для тех.
int hour = zdt.getHour();
int minute = zdt.getMinute();
О Java.Time.
То Java.Time. Рамки встроены в Java 8, а затем. Эти классы вытесняют проблему старого наследие Классы даты времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
То Joda-Time Проект, сейчас в Режим технического обслуживания, советует миграцию к Java.Time. классы.
Чтобы узнать больше, см. Учебник Oracle. Отказ И поиск стека переполнения для многих примеров и пояснений. Спецификация JSR 310..
Где получить классы Java.Time?
- Java SE 8. а также SE 9. и позже
- Встроенный.
- Часть стандартного Java API с подключенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6. а также SE 7.
- Большая часть функциональности Java.Time возвращается в Java 6 & 7 в Threeten-Backport..
- Андроид
- То Threetenabp. Адапты проекта Threeten-Backport. (упоминается выше) для Android специально.
- Видеть Как использовать THRETENABP ....
То Threeten-Extra Проект расширяет Java.Time с дополнительными классами. Этот проект является доказательством для возможных будущих дополнений в Java.Time. Вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
, а также более.