12

如果 Java 中不推荐使用某个方法,那么将有另一种更好的方法来获得相同的功能,对吧?

Date date = new Date();
date.getHours()

正如getHours()已弃用的那样,仅使用课程来获得时间的最佳方法是什么Date

4

7 回答 7

12

Javadoc 明确建议

Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY).

Joda 库是处理日期和时间的另一个最佳选择。

于 2013-01-23T17:44:08.107 回答
8

这些方法确实已被弃用。

您现在应该使用 java.util.Calendar#get()

所以你的例子变成

Calendar cal = Calendar.getInstance();
cal.get(Calendar.HOUR);

请参阅此类的 javadoc。

请注意,您可以通过在 cal 上调用 getTime 来获取 Date 对象。

于 2013-01-23T17:53:13.023 回答
6
Calendar cal = Calendar.getInstance();
cal.get(Calendar.HOUR);

如果你想作为一个日期

Date date = cal.getTime();
于 2013-01-23T17:43:58.887 回答
4

您应该使用日历或 Joda Time 库。

但是,如果您只能使用日期,这是您唯一的方法。请注意,这不会针对时区进行调整。

于 2013-01-23T17:44:14.507 回答
3

java.time

java.util日期时间 API 及其格式化 API已SimpleDateFormat过时且容易出错。建议完全停止使用它们并切换到现代 Date-Time API *

另外,下面引用的是来自Joda-Time主页的通知:

请注意,从 Java SE 8 开始,用户被要求迁移到 java.time (JSR-310) - JDK 的核心部分,它取代了这个项目。

使用java.time现代日期时间 API 的解决方案:

您可以使用ZonedDateTime#now(ZoneId)获取当前的 Date-Time 对象,从中可以获取时区偏移量、年、月、日、小时、分钟、秒、纳秒等信息。如果您不需要时区偏移量,则可以使用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

ONLINE DEMO

从Trail: Date Time了解有关现代日期时间 API 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

于 2021-07-21T12:10:50.093 回答
1

正如其他人已经说过的那样, 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);
    calendar.get(Calendar.HOUR_OF_DAY);
}

Calendar.HOUR_OF_DAY如果您想要 0-23 和Calendar.HOUR0-11 的数字,请使用。

于 2021-12-22T11:33:54.487 回答
-1

使用如下代码。

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));
}
于 2021-07-21T11:03:21.297 回答