在 Java 中获取当前日期时间

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

作为 Java 程序员,您经常需要处理日期和时间。在本文中,我们将学习如何在 Java 应用程序中获取当天的当前时间。在 Java 中,有几种方法可以做到这一点,程序员通常使用的主要类是 Date Calendar 类。您可以使用这两个类来计算当天的当前时间,然后使用 SimpleDateFormat 类根据您的要求设置时间格式。

使用日期和日历类

要计算当前时间,您可以创建一个 Date 对象,指定一种格式来表示当天的当前时间,最后使用 SimpleDateFormat 类按照您指定的方式格式化时间。

这是代码。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

在上面的代码中,我们创建了一个 Date 对象并指定了时间的格式。在格式字符串中,小写的 hh 表示 12 小时格式,而 mm ss 分别表示小时的分钟和分钟的秒。此外,格式字符串中的 a 是上午/下午标记。然后,我们创建了一个用格式字符串初始化的 SimpleDateFormat 对象,并调用传递 Date 对象的 format() 方法。 format() 方法以我们指定的格式返回当前时间。

使用 Calendar 类同样简单。这是代码。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

在上面的代码中,我们调用了 Calendar 类的 getInstance() 工厂方法来获取一个 Calendar 对象,然后对其调用 getTime() 方法。此方法返回一个 Date 对象。其余代码与我在前面的 Date 示例中解释的相同。您应该注意的唯一区别是格式字符串。这里我们将小时指定为 HH (大写),这将为我们提供 24 小时格式的时间。

这是完整的代码。

当前时间日期日历


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

接下来我们将编写一个测试类。

当前时间日期日历测试


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

输出是这样的。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

到目前为止,您可能认为用 Java 计算当前时间再简单不过了。但是 Date Calendar 类有一些固有的缺点。当您开始开发企业应用程序时,缺点变得更加明显。首先,这两个类都不是线程安全的,这可能会导致并发问题。此外,这两个类的计算时间仅限于毫秒。在关键任务企业应用程序中,通常需要将时间表示为纳秒精度。
此外,尽管 Date 类本身并未被弃用,但由于 API 设计不佳,其大部分构造函数和方法现在已被弃用。由于这些问题,企业应用程序开发人员转向第三方专门的日期和时间 API,尤其是 Joda-Time

使用 java.time

Oracle 的 Java 规范团队意识到内置日期和时间处理 API 的局限性,为了提供更高效的 API,在新的 Java SE 8 中引入了 java.time 包。该项目由 Oracle 和 Stephen Colebourne 共同开发, Joda-Time 的作者。新的 java.time API“ 受到 Joda-Time 的启发 ”。

计算默认时区的时间

java.time 包有几个处理日期和时间的类。让我们从一些代码开始计算默认时区的当前时间。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

如您所见,代码非常简单。我们调用了返回 LocalTime 对象的 LocalTime now() 方法。这是一个不可变对象,表示 ISO-8601 日历系统 中没有日期和时区的时间。

代码的输出是。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

在上面的输出中,观察时间以纳秒精度表示。

计算不同时区的时间

java.time 包提供了可用于获取不同时区的当前时间的类。例如,如果您位于默认时区并且您想要不同时区的当前时间,比如 America/Los_Angeles ,您可以使用以下类:

  • ZoneId :代表一个特定的时区。
  • DateTimeFormatter :类似于我们之前讨论的 SimpleDateFormat 类,此类是用于解析和打印日期时间对象的格式化程序。

计算不同时区当前时间的代码是这样的。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

在第 4-5 行中,我们创建了一个 ZoneId 对象来表示 America/Los_Angeles 时区,然后通过调用传递 ZoneId now() 方法来获取该时区的当前时间。 now() 方法返回的 LocalTime 对象保存 America/Los_Angeles 当天的当前时间。从第 6 行到第 8 行,我们使用 DateTimeFormatter 将时间格式化为 24 小时格式,并打印出格式化后的时间。

代码的输出是。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

计算不同时间偏移的时间

时间偏移量是以小时和分钟为单位添加到 协调世界时 (UTC) 或从中减去的时间量。 java.time 包提供了 ZoneOffset 类来计算不同时间偏移的当前时间。

使用 ZoneOffset 类的代码是这样的。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

在上面的代码中,我们在第 4 行创建了一个 ZoneOffset 对象来表示 -8:00 时间偏移量。在第 5 行中,我们创建了一个使用 ZoneOffset 对象初始化的 ZoneId 对象。第 6 行到第 9 行的剩余代码使用一个用 ZoneId 初始化的 LocalTime 对象和一个 DateTimeFormatter 对象,以 am/pm 标记将时间格式化为 12 小时格式

前面代码的输出是。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

我们讨论的片段的完整代码是这样的。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

让我们编写一个测试类来查看运行中的代码。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

我使用 Maven 运行测试得到的输出如下所示,这显然会根据您当前的时间和时区而有所不同。


 . . .
public static void getCurrentTimeUsingDate() {
    Date date = new Date();
    String strDateFormat = "hh:mm:ss a";
    DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
    String formattedDate= dateFormat.format(date);
    System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
}
. . . .

概括

就在 Java 中处理时间而言,这篇文章只是触及了皮毛。 java.time 包有一组广泛的类,可以简化日期和时间的处理。但是,在处理遗留应用程序时,您还会遇到 Date Calendar 类以及 Joda-Time API。但是,借助 java.time 中内置的强大功能,您可以轻松地将遗留的日期和时间计算代码转换为 java.time 。继续探索 java.time API,它有很好的文档记录且易于使用。

请记住,当您使用本地时间选项时,Java 将通过 JVM 与运行它的任何机器进行对话。这就是 Java 确定时间和时间操作的区域设置的方式。因此,您的代码在不同机器上运行时会产生不同的结果。请注意,当您处理小型应用程序时,您通常不需要担心时区问题。但在更大的应用程序中,你会。您需要让您的代码知道时区。许多开发人员忽略了时区组件,然后随着应用程序的增长而遇到问题。

相关文章