Java getHours(),getMinutes()和getSeconds()

正如我所知道的getHours()getMinutes()getSeconds()在Java中都被弃用,它们被Calendar.HOUR_OF_DAYCalendar.MINUTECalendar.SECOND所取代。

实际上这些将在特定时刻返回小时,分钟和秒钟。 不过,我想从Datevariables中检索小时和分钟。 例如,

说从数据库中检索的时间是

 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 

那么,我该如何使用Calendar来实现这个function呢? 虽然getHours()已被弃用,但仍然有效。 我仍然想知道是否有替代scheme。

    尝试这个:

     Calendar calendar = Calendar.getInstance(); calendar.setTime(yourdate); int hours = calendar.get(Calendar.HOUR_OF_DAY); int minutes = calendar.get(Calendar.MINUTE); int seconds = calendar.get(Calendar.SECOND); 
      // Java 8 System.out.println(LocalDateTime.now().getHour()); // 7 System.out.println(LocalDateTime.now().getMinute()); // 45 System.out.println(LocalDateTime.now().getSecond()); // 32 // Calendar 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 // Joda Time System.out.println(new DateTime().getHourOfDay()); // 7 System.out.println(new DateTime().getMinuteOfHour()); // 45 System.out.println(new DateTime().getSecondOfMinute()); // 32 // Formatted // 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

    我build议看Joda时间 – 比标准的Javadate/日历类更好。 他们的文档是相当合理的,你也可以尝试search堆栈溢出,如果你需要帮助。