如果一个方法在Java中被弃用,那么还有另一种更好的方法来拥有相同的功能,对吧?
Date date = new Date();
date.getHours()
随着getHours()
的弃用,仅使用 Date
类获得小时数的最佳方法是什么?
Javadoc 明确建议
Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY).
乔达图书馆是处理日期和时间的另一个最佳选择。
正如其他人已经说过的那样,Javadoc建议改用Calendar.get(Calendar.HOUR_OF_DAY)
。
Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY).
以下是对已设置Date
执行此操作的方法:
int getHourOfDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.HOUR_OF_DAY);
}
如果要 0-23 之间的数字和 0-11 之间的Calendar.HOUR
,请使用 Calendar.HOUR_OF_DAY
。
这些方法确实已被弃用。
你现在应该使用 java.util.Calendar#get()
所以你的例子变成了
Calendar cal = Calendar.getInstance();
cal.get(Calendar.HOUR);
请参阅此类的 Javadoc。
请注意,您可以通过在 cal 上调用 getTime 来获取 Date 对象。
Calendar cal = Calendar.getInstance();
cal.get(Calendar.HOUR);
如果你想要是作为日期
Date date = cal.getTime();
您应该使用日历或 Joda 时间库。
但是,如果您只能使用日期,这是您唯一的方法。 请注意,这不会根据时区进行调整。
java.time
java.util
日期时间 API 及其格式设置 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们,并切换到现代日期-时间 API*。
另外,下面引用的是Joda-Time主页上的通知:
请注意,从Java SE 8开始,用户被要求迁移到java.time(JSR-310) - JDK的核心部分,它取代了这个项目。
使用 java.time
的解决方案,即现代日期-时间 API:
您可以使用ZonedDateTime#now(ZoneId)
获取当前日期时间对象,从中可以获取时区偏移量、年、月、日、小时、分钟、秒、纳秒等信息。如果不需要时区偏移量,则可以改用LocalDateTime#now(ZoneId)
。但是,如果您只需要当前时间信息,则可以使用LocalTime#now(ZoneId)
获取特定时区的本地时间,然后从LocalTime
中获取小时,分钟,秒,纳秒等。
演示:
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
// Change the JVM's ZoneId, ZoneId.systemDefault() with the applicable ZoneId
// e.g. ZoneId.of("America/Los_Angeles")
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.now(zoneId);
System.out.println(zdt.getHour());
LocalDateTime ldt = LocalDateTime.now(zoneId);
System.out.println(ldt.getHour());
LocalTime time = LocalTime.now(zoneId);
System.out.println(time.getHour());
}
}
示例运行的输出:
13
13
13
在线演示
要了解有关现代日期-时间 API 的更多信息,请参阅跟踪:日期时间。
<小时 />出于任何原因,如果你必须坚持使用Java 6或Java 7,你可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到Java 6和7。如果您正在为 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请查看通过脱糖提供的 Java 8+ API 和如何在 Android Project 中使用 ThreeTenABP。
使用如下代码。
Date date = new Date();
System.out.println(date);
System.out.println(new SimpleDateFormat("HH").format(date));
System.out.println(new SimpleDateFormat("mm").format(date));
System.out.println(new SimpleDateFormat("MM").format(date));
}