作为 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 确定时间和时间操作的区域设置的方式。因此,您的代码在不同机器上运行时会产生不同的结果。请注意,当您处理小型应用程序时,您通常不需要担心时区问题。但在更大的应用程序中,你会。您需要让您的代码知道时区。许多开发人员忽略了时区组件,然后随着应用程序的增长而遇到问题。