如果一个Java方法已经被废弃,那么一定会存在另一种更好的方式实现相同的功能,对吗?
Date date = new Date();
date.getHours()
由于getHours()
已被弃用,仅使用Date
类来获取小时的最佳方法是什么?
如果一个Java方法已经被废弃,那么一定会存在另一种更好的方式实现相同的功能,对吗?
Date date = new Date();
date.getHours()
由于getHours()
已被弃用,仅使用Date
类来获取小时的最佳方法是什么?
Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY).
Joda库是处理日期和时间的另一个最佳选择。
正如其他人所述,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之间的数字,请使用Calendar.HOUR_OF_DAY
,而对于0-11,请使用Calendar.HOUR
。
这些方法已经被弃用。
你现在应该使用 java.util.Calendar#get()。
所以你的示例变成:
Calendar cal = Calendar.getInstance();
cal.get(Calendar.HOUR);
请注意,您可以通过调用cal.getTime()方法来获取一个Date对象。
Calendar cal = Calendar.getInstance();
cal.get(Calendar.HOUR);
Date date = cal.getTime();
Date.getHours()
尝试返回一天中的小时数(0-23)。cal.get(Calendar.HOUR)
返回上午或下午的小时数(0-11)。尽管这已经无关紧要了。Date
和 calendar
都设计不良且过时很久了。不要再使用它们。请使用 java.time,现代Java日期和时间API。 - Ole V.V.你应该使用日历或者Joda Time库。
但如果你只能使用Date,那么这是你唯一的方法。注意,它不会调整时区。
java.util
的日期时间API及其格式化API SimpleDateFormat
已经过时且容易出错,建议完全停止使用并切换到现代日期时间API*。
此外,下面引用了来自Joda-Time首页的通知:
请注意,从Java SE 8开始,用户被要求迁移到java.time(JSR-310) - JDK的核心部分,取代该项目。
使用现代日期时间API java.time的解决方案:
您可以使用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项目中使用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));
}
SimpleDateFormat
的规范。请删除不必要的输出或详细说明每一行输出。 - Izruo