Java: getMinutes і getHours


142

Як ви отримуєте Години та Хвилини з тих пір Date.getHoursі Date.getMinutesзастаріли? У прикладах, які я знайшов у пошуку Google, використовувались застарілі методи.


2
FYI, жахливі класи, які датують час, такі як java.util.Date, java.util.Calendarі java.text.SimpleDateFormatтепер є застарілими , витіснені класами java.time, вбудованими в Java 8 та новіших версій. Дивіться Підручник від Oracle .
— Василь Бурк

Відповіді:


171

Спробуйте використовувати Joda Time замість стандартних класів java.util.Date. Бібліотека часу Joda має набагато кращий API для обробки дат.

DateTime dt = new DateTime();  // current time
int month = dt.getMonth();     // gets the current month
int hours = dt.getHourOfDay(); // gets hour of day

Перегляньте це питання щодо плюсів і мінусів використання бібліотеки Joda Time.

Joda Time також може бути включений до деякої майбутньої версії Java як стандартного компонента, див. JSR-310 .


Якщо вам потрібно використовувати традиційні класи java.util.Date та java.util.Calendar, зверніться за допомогою до їх JavaDoc ( java.util.Calendar та java.util.Date ).

Ви можете використовувати традиційні класи, як цей, для отримання полів із заданого екземпляра Date.

Date date = new Date();   // given date
Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(date);   // assigns calendar to given date 
calendar.get(Calendar.HOUR_OF_DAY); // gets hour in 24h format
calendar.get(Calendar.HOUR);        // gets hour in 12h format
calendar.get(Calendar.MONTH);       // gets month number, NOTE this is zero based!

2
Питання: Тепер, коли Java 8 розгорнулася з LocalDateTime, чи є причина, що вам слід використовувати Joda Time за LocalDateTime?
— щебетати

@Chrips Думки відрізняються. Joda-Time офіційно рекомендує замість цього використовувати java.time.
— Оле ВВ

96

Від Javadoc для Date.getHours

As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)

Тож використовуйте

Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);

і еквівалент getMinutes.


6
Отже ... як це працює, якщо я хочу отримати години від дати, яка не відповідає зараз?
— Майкл


Цей жахливий клас був витіснений роками тому сучасними класами java.time , з прийняттям JSR 310. Використовуйте ZonedDateTimeзамість цього.
— Василь Бурк

58

java.time

Поки я фанат Joda-Time , Java 8 представляє пакет java.time, який, нарешті, є гідним стандартним рішенням Java! Прочитайте цю статтю, Дата і час Java SE 8 , щоб отримати велику кількість інформації про java.time поза годин і хвилин.

Зокрема, подивіться на LocalDateTimeклас.

Години і хвилини:

LocalDateTime.now().getHour();
LocalDateTime.now().getMinute();

4
Це найкраща відповідь. Ви можете надати явну тимчасову зону , щоб нагадати читач і себе , що це тимчасова зона чутливої діяльність: LocalDateTime.now(ZoneId.of("Asia/Manilla")). Прочитайте now()лише один раз для узгодженості (пройде час між двома дзвінками). Якщо дата справді не має значення, LocalTimeтеж працює.
— Оле ВВ

1
Дякую за це. Я якось ВІДМОВИТИ цю чудову побудовану в класі давно!
— щебетає

Коментар Оле В. В. правильний. Але ще краще, ZonedDateTimeскоріше використовуйте клас LocalDateTime. Коли LocalDateTimeви відкидаєте цінну інформацію про часовий пояс без причини, нічого не отримуючи.
— Василь Бурк

Корисно, якщо вам не потрібно бути сумісними назад. На жаль, це не підходить, якщо ви пишете для Android та підтримуєте більш старі версії API (або в будь-якому іншому випадку, коли Java 8 не завжди доступний).
— M_M

@M_M Для Java - 6 і 7, велика частина java.time функціональності назад перенесений в ThreeTen-Backport бібліотеці. Далі адаптовано до раннього Android у ThreeTenABP . Для посилань див. Останній розділ моєї відповіді .
— Василь Бурк

36

По-перше, імпортуйте java.util.Calendar

Calendar now = Calendar.getInstance();
System.out.println(now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE));

12

тл; д-р

ZonedDateTime.now().getHour()

… Або…

LocalTime.now().getHour() 

ZonedDateTime

Відповіді на цей питання JD добре , але не є оптимальним. Ця відповідь використовує LocalDateTimeклас. Відсутність будь-якої концепції часового поясу або зміщення від UTC, цей клас не може представляти момент.

Краще використовувати ZonedDateTime.

ZoneId z = ZoneID.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

Вкажіть часовий пояс

Якщо ви опустите ZoneIdаргумент, він застосовується неявно під час виконання, використовуючи поточний часовий пояс JVM за замовчуванням.

Отже це:

ZonedDateTime.now()

… Те саме, що і це:

ZonedDateTime.now( ZoneId.systemDefault() )

Краще бути чітким, минаючи бажаний / очікуваний часовий пояс. За замовчуванням під час виконання може змінитися будь-який момент .

Якщо це критично, підтвердьте часовий пояс із користувачем.

Годинна хвилина

Допитуйтеся ZonedDateTimeпротягом години та хвилини.

int hour = zdt.getHour() ;
int minute = zdt.getMinute() ;

LocalTime

Якщо ви хочете просто час доби без часового поясу, витягніть LocalTime.

LocalTime lt = zdt.toLocalTime() ;

Або пропустити ZonedDateTimeповністю, переходячи безпосередньо до LocalTime.

LocalTime lt = LocalTime.now( z ) ;  // Capture the current time-of-day as seen in the wall-clock time used by the people of a particular region (a time zone).

типи java.time

Таблиця типів класів дати-часу в сучасному java.time порівняно зі спадщиною.


Про java.time

Java.time каркас вбудований в Java 8 і пізніших версій. Ці класи витісняти неприємні старі застарілі класи дати і часу , такі як java.util.Date, Calendar, і SimpleDateFormat.

Щоб дізнатися більше, дивіться навчальний посібник Oracle . І шукайте переповнення стека за багатьма прикладами та поясненнями. Специфікація - JSR 310 .

Проект Joda-Time , який зараз знаходиться в режимі обслуговування , радить перейти до класів java.time .

Ви можете обмінюватися об'єктами java.time безпосередньо зі своєю базою даних. Використовуйте драйвер JDBC, сумісний з JDBC 4.2 або пізнішої версії. Немає потреби в струнах, немає потреби в java.sql.*заняттях.

Де отримати класи java.time?

Проект ThreeTen-Extra розширює java.time додатковими класами. Цей проект є доказом можливих майбутніх доповнень до java.time. Ви можете знайти деякі корисні класи тут , такі як Interval, YearWeek, YearQuarter, і більш .


6

Спробуйте каландр. Використовуйте getInstance, щоб отримати об'єкт календаря. Потім використовуйте setTime, щоб встановити необхідну дату. Тепер ви можете використовувати get (int поле) з відповідною константою, наприклад HOUR_OF_DAY, або для того, щоб прочитати потрібні вам значення.

http://java.sun.com/javase/6/docs/api/java/util/Calendar.html


3
int hr=Time.valueOf(LocalTime.now()).getHours();
int minutes=Time.valueOf(LocalTime.now()).getMinutes();

Ці функції повернуть значення int за години та хвилини.


1
Дублікат. Цей підхід уже висвітлювався у відповіді JD .
— Василь Бурк

Це java.sql.Time? Безумовно, немає жодних причин для того, щоб приносити цей застарілий клас в гру, коли у вас є java.time.LocalTime. Ти надмірно ускладнюєш.
— Оле ВВ

Схоже, getMinutes()це було знято з використання (я використовую java 1.8) і замінено наCalendar.get(Calendar.MINUTE)
— Saltz3

3

Ще один спосіб отримання хвилин і годин - це використання SimpleDateFormat.

SimpleDateFormat formatMinutes = new SimpleDateFormat("mm")
String getMinutes = formatMinutes.format(new Date())

SimpleDateFormat formatHours = new SimpleDateFormat("HH")
String getHours = formatHours.format(new Date())

FYI, жахливі класи, які датують час, такі як java.util.Date, java.util.Calendarі java.text.SimpleDateFormatтепер є застарілими , витіснені класами java.time, вбудованими в Java 8 та новіших версій. Дивіться Підручник від Oracle .
— Василь Бурк

2

Я рекомендую переглянути час joda ad. http://www.joda.org/joda-time/

Я побоювався додати ще одну бібліотеку до свого товстого проекту, але це просто легко і швидко, розумно і приголомшливо. Плюс до певної міри це добре грає з існуючим кодом.


1

Хоча я б не рекомендував це робити, я думаю, що варто зазначити, що хоча багато методів на java.util.Date застаріли, вони все ще працюють. У тривіальних ситуаціях може бути нормально їх використовувати. Крім того, java.util.Calendar є досить повільним, тому getMonth та getYear на Date можуть бути кориснішими швидше.


1
public static LocalTime time() {
    LocalTime ldt = java.time.LocalTime.now();

    ldt = ldt.truncatedTo(ChronoUnit.MINUTES);
    System.out.println(ldt);
    return ldt;
}

Це працює для мене


0

import java.util.*Ви можете вести час і хвилини, використовуючи календар та клас форматування. Calendar cal = Calendar.getInstance()і Formatter fmt=new Formatter()встановіть формат для відображення годин, хвилин fmt.format("%tl:%M",cal,cal)та System.out.println(fmt) показів друку10:12

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.