我应该使用什么而不是不推荐使用的Date.getHours()



如果一个方法在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));
}

相关内容

  • 没有找到相关文章

最新更新