据我所知,
getHours()
、getMinutes()
和getSeconds()
在Java中均已弃用,它们被替换为Calendar.HOUR_OF_DAY
、Calendar.MINUTE
、Calendar.SECOND
。
实际上,这些将返回该特定时刻的小时、分钟和秒。但是,我想从日期变量中检索小时和分钟。例如,
假设从数据库检索的时间是
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()
已被弃用,但它仍然有效。我还是想知道是否有替代方案。
试试这个:
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);
编辑:
hours, minutes, seconds
以上是将
yourdate
转换为系统时区后的小时、分钟和秒!
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
ZonedDateTime
在 Java 中全部已弃用,并被日历取代。
更新: 现在
java.time类中的
Calendar
类已被
ZonedDateTime
类取代。现代 java.time 类已经取代了存在严重缺陷的遗留类,例如 JSR 310 中的 Calendar
。
使用
ZonedDateTime
来表示通过特定时区的人们使用的时钟和日历看到的时刻。将时区指定为 ZoneId
对象。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ; // Capture the current moment as seen in a particular time zone.
getHours()、getMinutes() 和 getSeconds()
ZonedDateTime
类具有等效的方法。
int hour = zdt.getHour() ;
int minute = zdt.getMinute() ;
int second = zdt.getSecond() ;
int nano = zdt.getNano() ; // The fraction of a second, as a count of nanoseconds ( zero to a billion ).