Как вы получаете часы и минуты , так Date.getHoursи Date.getMinutesполучил осуждается? В примерах, которые я нашел в поиске Google, использовались устаревшие методы.
Попробуйте использовать Joda Time вместо стандартных классов java.util.Date. Библиотека Joda Time имеет гораздо лучший API для обработки дат.
DateTime dt = new DateTime(); // current timeint month = dt.getMonth(); // gets the current monthint 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!
Этот ужасный класс был вытеснен много лет назад современными классами java.time с принятием JSR 310. Используйте ZonedDateTimeвместо него.
Basil
58
java.time
Хотя я являюсь поклонником Joda-Time , в Java 8 представлен пакет java.time , который, наконец, стал стоящим стандартным решением Java! Прочтите эту статью, Java SE 8 Date and Time , чтобы получить хорошее количество информации о java.time за пределами часов и минут.
Это лучший ответ. Вы можете предоставить явную временную зону , чтобы напомнить читатель и себя , что это временная зона чувствительной деятельность: LocalDateTime.now(ZoneId.of("Asia/Manilla")). Прочтите now()только один раз для единообразия (между двумя вызовами пройдет время). Если дата действительно неактуальна, LocalTimeтоже работает.
Ole VV
1
Спасибо тебе за это. Я как-то долго ПРОИСХОДИЛА по этому замечательному встроенному классу!
chrips
Комментарий Оле В.В. верен. Но даже лучше использовать ZonedDateTimeclass, а не LocalDateTime. С LocalDateTimeвы отбрасываете ценную информацию о часовом поясе без причины, ничего не получая.
Basil
Полезно, если вам не нужна обратная совместимость. К сожалению, не подходит, если вы пишете для Android и поддерживаете старые версии API (или в любом другом случае, когда Java 8 не всегда доступна).
M_M
@M_M Для Java 6 и 7 большая часть функциональных возможностей java.time перенесена в библиотеку ThreeTen-Backport . Дальнейшая адаптация к ранним версиям Android в ThreeTenABP . Ссылки см. В последнем разделе моего ответа .
Базиль Бурк,
37
Сначала импортируйте java.util.Calendar
Calendar now = Calendar.getInstance();
System.out.println(now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE));
Ответа на этот вопрос JD хорошо , но не является оптимальным. В этом ответе используется LocalDateTimeкласс. При отсутствии концепции часового пояса или смещения от UTC этот класс не может представлять момент.
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 напрямую с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или новее. Нет необходимости в строках, нет необходимости в java.sql.*занятиях.
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательной площадкой для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval, YearWeek, YearQuarter, и более .
Попробуйте Calender. Используйте getInstance, чтобы получить объект календаря. Затем используйте setTime, чтобы установить требуемую дату. Теперь вы можете использовать get (int field) с соответствующей константой, например HOUR_OF_DAY или около того, чтобы прочитать нужные вам значения.
Дубликат. Этот подход уже рассматривался в Ответе JD .
Basil
Это что java.sql.Time? Конечно, нет никаких причин вводить в игру этот устаревший класс, когда он у вас есть java.time.LocalTime. Вы слишком усложняете.
Ole VV
Похоже 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())
Я боялся добавить еще одну библиотеку в свой толстый проект, но это просто, быстро, умно и круто. Кроме того, в некоторой степени он хорошо сочетается с существующим кодом.
Хотя я бы не рекомендовал это делать, я думаю, стоит отметить, что, хотя многие методы в java.util.Date устарели, они все еще работают. В тривиальных ситуациях их можно использовать. Кроме того, java.util.Calendar работает довольно медленно, поэтому getMonth и getYear on Date могут быть более быстрыми.
import java.util.*Вы можете узнать часы и минуты, используя календарь и класс форматирования. Calendar cal = Calendar.getInstance()и Formatter fmt=new Formatter()установите формат отображения часов и минут, fmt.format("%tl:%M",cal,cal)и System.out.println(fmt) вывод на печать будет выглядеть как10:12
java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
, теперь унаследованы , вытеснены классами java.time, встроенными в Java 8 и более поздних версий . См. Учебник Oracle .Ответы:
Попробуйте использовать Joda Time вместо стандартных классов java.util.Date. Библиотека Joda Time имеет гораздо лучший 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!
источник
Из 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.
источник
ZonedDateTime
вместо него.java.time
Хотя я являюсь поклонником Joda-Time , в Java 8 представлен пакет java.time , который, наконец, стал стоящим стандартным решением Java! Прочтите эту статью, Java SE 8 Date and Time , чтобы получить хорошее количество информации о java.time за пределами часов и минут.
В частности, посмотрите на
LocalDateTime
класс.Часы и минуты:
источник
LocalDateTime.now(ZoneId.of("Asia/Manilla"))
. Прочтитеnow()
только один раз для единообразия (между двумя вызовами пройдет время). Если дата действительно неактуальна,LocalTime
тоже работает.ZonedDateTime
class, а неLocalDateTime
. СLocalDateTime
вы отбрасываете ценную информацию о часовом поясе без причины, ничего не получая.Сначала импортируйте java.util.Calendar
Calendar now = Calendar.getInstance(); System.out.println(now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE));
источник
tl; dr
… или …
ZonedDateTime
Ответа на этот вопрос JD хорошо , но не является оптимальным. В этом ответе используется
LocalDateTime
класс. При отсутствии концепции часового пояса или смещения от UTC этот класс не может представлять момент.Лучше использовать
ZonedDateTime
.ZoneId z = ZoneID.of( "America/Montreal" ) ; ZonedDateTime zdt = ZonedDateTime.now( z ) ;
Укажите часовой пояс
Если вы опустите
ZoneId
аргумент, он применяется неявно во время выполнения с использованием текущего часового пояса JVM по умолчанию.Итак, это:
… То же самое, что это:
Лучше быть явным, указав желаемый / ожидаемый часовой пояс. Значение по умолчанию может измениться в любой момент во время выполнения.
Если критично, уточните часовой пояс у пользователя.
Час-минута
Опросите
ZonedDateTime
час и минуту.int hour = zdt.getHour() ; int minute = zdt.getMinute() ;
LocalTime
Если вам нужно только время суток без часового пояса, извлеките
LocalTime
.Или
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 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Чтобы узнать больше, см. Oracle Tutorial . И поищите в Stack Overflow множество примеров и объяснений. Спецификация - 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
, и более .источник
Попробуйте Calender. Используйте getInstance, чтобы получить объект календаря. Затем используйте setTime, чтобы установить требуемую дату. Теперь вы можете использовать get (int field) с соответствующей константой, например HOUR_OF_DAY или около того, чтобы прочитать нужные вам значения.
http://java.sun.com/javase/6/docs/api/java/util/Calendar.html
источник
int hr=Time.valueOf(LocalTime.now()).getHours(); int minutes=Time.valueOf(LocalTime.now()).getMinutes();
Эти функции возвращают значения типа int в часах и минутах.
источник
java.sql.Time
? Конечно, нет никаких причин вводить в игру этот устаревший класс, когда он у вас естьjava.time.LocalTime
. Вы слишком усложняете.getMinutes()
, он устарел (я использую java 1.8) и был заменен наCalendar.get(Calendar.MINUTE)
Еще один способ получить минуты и часы - использовать SimpleDateFormat.
SimpleDateFormat formatMinutes = new SimpleDateFormat("mm") String getMinutes = formatMinutes.format(new Date()) SimpleDateFormat formatHours = new SimpleDateFormat("HH") String getHours = formatHours.format(new Date())
источник
java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
, теперь унаследованы , вытеснены классами java.time, встроенными в Java 8 и более поздних версий . См. Учебник Oracle .Я бы рекомендовал посмотреть ad joda time. http://www.joda.org/joda-time/
Я боялся добавить еще одну библиотеку в свой толстый проект, но это просто, быстро, умно и круто. Кроме того, в некоторой степени он хорошо сочетается с существующим кодом.
источник
Хотя я бы не рекомендовал это делать, я думаю, стоит отметить, что, хотя многие методы в java.util.Date устарели, они все еще работают. В тривиальных ситуациях их можно использовать. Кроме того, java.util.Calendar работает довольно медленно, поэтому getMonth и getYear on Date могут быть более быстрыми.
источник
public static LocalTime time() { LocalTime ldt = java.time.LocalTime.now(); ldt = ldt.truncatedTo(ChronoUnit.MINUTES); System.out.println(ldt); return ldt; }
Это работает для меня
источник
import java.util.*
Вы можете узнать часы и минуты, используя календарь и класс форматирования.Calendar cal = Calendar.getInstance()
иFormatter fmt=new Formatter()
установите формат отображения часов и минут,fmt.format("%tl:%M",cal,cal)
иSystem.out.println(fmt)
вывод на печать будет выглядеть как10:12
источник