Z tego co wiem getHours()
, getMinutes()
i getSeconds()
są przestarzałe w Javie i są zastępowane Calendar.HOUR_OF_DAY
, Calendar.MINUTE
, Calendar.SECOND
.
W rzeczywistości zwrócą one godzinę, minutę i sekundę dla tego konkretnego momentu. Chciałbym jednak pobrać godziny i minuty ze zmiennej Date. Na przykład,
powiedz, że czas pobierania z bazy danych to
time = Thu Jan 01 09:12:18 CET 1970;
int hours = time.getHours();
int minutes = time.getMinutes();
int seconds = time.getSeconds();
Pobierając godziny, minuty i sekundy, otrzymuję
hours = 9
minutes = 12
seconds = 18
Jak więc używać Kalendarza do tej funkcji? Chociaż getHours()
została wycofana, ale nadal działała. Nadal chciałbym wiedzieć, czy istnieje alternatywa dla tego.
Java 8
System.out.println(LocalDateTime.now().getHour()); // 7 System.out.println(LocalDateTime.now().getMinute()); // 45 System.out.println(LocalDateTime.now().getSecond()); // 32
Kalendarz
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
Czas Joda
System.out.println(new DateTime().getHourOfDay()); // 7 System.out.println(new DateTime().getMinuteOfHour()); // 45 System.out.println(new DateTime().getSecondOfMinute()); // 32
Sformatowany
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));
źródło
W przypadku różnicy czasu pamiętaj, że kalendarz zaczyna się o 01.01.1970, 01:00, a nie o 00:00. Jeśli używasz java.util.Date i java.text.SimpleDateFormat, będziesz musiał zrekompensować 1 godzinę:
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));
Spowoduje to wydrukowanie:
Czas trwania: 1: 23: 45.678
źródło