Насколько я знаю getHours()
, getMinutes()
и getSeconds()
все осуждается в Java , и они заменяются Calendar.HOUR_OF_DAY
, Calendar.MINUTE
, Calendar.SECOND
.
Фактически, они вернут час, минуту и секунду для этого конкретного момента. Однако я бы хотел получить часы и минуты из переменной Date. Например,
скажем, время, полученное из базы данных,
time = Thu Jan 01 09:12:18 CET 1970;
int hours = time.getHours();
int minutes = time.getMinutes();
int seconds = time.getSeconds();
Получив часы, минуты и секунды, я получаю
hours = 9
minutes = 12
seconds = 18
Итак, как мне использовать Календарь для этой функции? Хотя эта getHours()
функция устарела, она все еще работала. Хотелось бы еще узнать, есть ли этому альтернатива.
Java 8
System.out.println(LocalDateTime.now().getHour()); // 7 System.out.println(LocalDateTime.now().getMinute()); // 45 System.out.println(LocalDateTime.now().getSecond()); // 32
Календарь
System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)); // 7 System.out.println(Calendar.getInstance().get(Calendar.MINUTE)); // 45 System.out.println(Calendar.getInstance().get(Calendar.SECOND)); // 32
Джода Тайм
System.out.println(new DateTime().getHourOfDay()); // 7 System.out.println(new DateTime().getMinuteOfHour()); // 45 System.out.println(new DateTime().getSecondOfMinute()); // 32
Отформатирован
Java 8
// 07:48:55.056 System.out.println(ZonedDateTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME)); // 7:48:55 System.out.println(LocalTime.now().getHour() + ":" + LocalTime.now().getMinute() + ":" + LocalTime.now().getSecond()); // 07:48:55 System.out.println(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime())); // 074855 System.out.println(new SimpleDateFormat("HHmmss").format(Calendar.getInstance().getTime())); // 07:48:55 System.out.println(new Date().toString().substring(11, 20));
источник
Для разницы во времени обратите внимание, что календарь начинается с 01.01.1970, 01:00, а не с 00:00. Если вы используете java.util.Date и java.text.SimpleDateFormat, вам придется компенсировать 1 час:
long start = System.currentTimeMillis(); long end = start + (1*3600 + 23*60 + 45) * 1000 + 678; // 1 h 23 min 45.678 s Date timeDiff = new Date(end - start - 3600000); // compensate for 1h in millis SimpleDateFormat timeFormat = new SimpleDateFormat("H:mm:ss.SSS"); System.out.println("Duration: " + timeFormat.format(timeDiff));
Это напечатает:
Продолжительность: 1: 23: 45.678
источник