Java LocalTime
最后修改日期:2024 年 7 月 10 日
在本文中,我们将展示如何在 Java 中使用 LocalTime。我们将计算当前本地时间、解析本地时间、格式化本地时间、比较本地时间并进行时间算术运算。
LocalTime 是 ISO-8601 日历系统中不带时区的时间。LocalTime
是一个不可变的日期时间对象。
LocalTime
不存储或表示日期或时区。它描述的是在挂钟上看到的本地时间。挂钟时间,也称为现实世界时间或实际时间,指的是由腕表或挂钟等计时器确定的经过时间。
比较时应使用 equals
方法。
当前时间
当前时间使用 LocalTime.now
获取。
import java.time.LocalTime; void main() { LocalTime now = LocalTime.now(); System.out.println(now); }
该示例打印当前的本地时间。
$ java Main.java 11:43:02.229989200
创建 LocalTime 对象
在 Java 中有几种创建 LocalTime
的方法。
import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; void main() { // Current Time LocalTime time1 = LocalTime.now(); System.out.println(time1); // Specific Time LocalTime time2 = LocalTime.of(7, 20, 45, 342123342); System.out.println(time2); // Specific Time LocalTime time3 = LocalTime.parse("12:32:22", DateTimeFormatter.ISO_TIME); System.out.println(time3); // Retrieving from LocalDateTime LocalTime time4 = LocalDateTime.now().toLocalTime(); System.out.println(time4); }
该示例展示了四种方法
LocalTime time1 = LocalTime.now();
LocalTime.now
创建当前的本地时间。
LocalTime time2 = LocalTime.of(7, 20, 45, 342123342);
使用 LocalTime.of
,我们可以从小时、分钟、秒和纳秒创建一个特定的本地时间。
LocalTime time3 = LocalTime.parse("12:32:22", DateTimeFormatter.ISO_TIME);
使用 LocalTime.parse
,我们可以从字符串解析 LocalTime
。
LocalTime time4 = LocalDateTime.now().toLocalTime();
也可以从 LocalDateTime
对象获取 LocalTime
。
$ java Main.java 18:18:12.135 07:20:45.342123342 12:32:22 18:18:12.186
LocalTime 小时、分钟、秒
以下示例将本地时间拆分为小时、分钟和秒部分。
import java.time.LocalTime; void main() { LocalTime time = LocalTime.now(); System.out.printf("Hour: %s%n", time.getHour()); System.out.printf("Minute: %s%n", time.getMinute()); System.out.printf("Second: %s%n", time.getSecond()); }
getHour
获取小时部分,getMinute
获取分钟部分,getSecond
获取 LocalTime
的秒部分。
$ java Main.java Hour: 11 Minute: 41 Second: 47
LocalTime 时区
我们可以计算特定时区的本地时间。但是,LocalTime
不存储时区信息。
import java.time.LocalTime; import java.time.ZoneId; import java.time.temporal.ChronoUnit; void main() { ZoneId zone1 = ZoneId.of("Europe/Bratislava"); ZoneId zone2 = ZoneId.of("Europe/Moscow"); LocalTime now1 = LocalTime.now(zone1); LocalTime now2 = LocalTime.now(zone2); System.out.printf("Bratislava time: %s%n", now1); System.out.printf("Moscow time: %s%n", now2); long hoursBetween = ChronoUnit.HOURS.between(now1, now2); long minutesBetween = ChronoUnit.MINUTES.between(now1, now2); System.out.println(hoursBetween); System.out.println(minutesBetween); }
该示例找出莫斯科和布拉迪斯拉发的当前本地时间。我们还计算了这两个城市之间的时间差。
ZoneId zone1 = ZoneId.of("Europe/Bratislava"); ZoneId zone2 = ZoneId.of("Europe/Moscow");
我们使用 ZoneId.of
方法指定时区。
LocalTime now1 = LocalTime.now(zone1); LocalTime now2 = LocalTime.now(zone2);
要创建本地时间,我们将时区传递给 LocalTime.now
。
long hoursBetween = ChronoUnit.HOURS.between(now1, now2); long minutesBetween = ChronoUnit.MINUTES.between(now1, now2);
我们计算了这两个城市之间的小时和分钟差。
$ java Main.java Bratislava time: 11:42:13.775138900 Moscow time: 12:42:13.777141 1 60
LocalTime 格式
在不同的国家/地区,时间的格式不同。DateTimeFormatter
帮助我们格式化时间。
import java.time.LocalTime; import java.time.format.DateTimeFormatter; void main() { LocalTime now = LocalTime.now(); DateTimeFormatter dtf = DateTimeFormatter.ISO_TIME; System.out.println(now.format(dtf)); DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("hh:mm:ss"); System.out.println(now.format(dtf2)); DateTimeFormatter dtf3 = DateTimeFormatter.ofPattern("hh:mm:ss a"); System.out.println(now.format(dtf3)); }
该示例使用 DateTimeFormatter
格式化时间。
DateTimeFormatter dtf = DateTimeFormatter.ISO_TIME; System.out.println(now.format(dtf));
我们将时间格式化为 ISO 格式时间标准。
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("hh:mm:ss");
我们可以使用 DateTimeFormatter.ofPattern
选择特定的时间格式。DateTimeFormatter
的文档包含我们可以使用的各种格式化字符的描述。
$ java Main.java 11:43:59.9144994 11:43:59 11:43:59 AM
LocalTime 算术运算
Java LocalTime
具有执行时间算术运算的方法。
import java.time.LocalTime; void main() { LocalTime now = LocalTime.now(); System.out.println("Current Time: " + now); // LocalTime addition System.out.println("Adding 3 hours: " + now.plusHours(3)); System.out.println("Adding 30 minutes: " + now.plusMinutes(30)); System.out.println("Adding 45 seconds: " + now.plusSeconds(45)); System.out.println("Adding 40000 nanoseconds: " + now.plusNanos(40000)); // LocalTime subtraction System.out.println("Subtracting 3 hours: " + now.minusHours(3)); System.out.println("Subtracting 30 minutes: " + now.minusMinutes(30)); System.out.println("Subtracting 45 seconds: " + now.minusSeconds(45)); System.out.println("Subtracting 40000 nanoseconds: " + now.minusNanos(40000)); }
该示例展示了用于添加和减去时间单位的方法。
System.out.println("Adding 3 hours: " + localTime.plusHours(3));
plusHours
将当前本地时间增加三个小时。
System.out.println("Subtracting 3 hours: " + now.minusHours(3));
同样,minusHours
从当前本地时间减去三个小时。
$ java Main.java Current Time: 11:44:32.932360500 Adding 3 hours: 14:44:32.932360500 Adding 30 minutes: 12:14:32.932360500 Adding 45 seconds: 11:45:17.932360500 Adding 40000 nanoseconds: 11:44:32.932400500 Subtracting 3 hours: 08:44:32.932360500 Subtracting 30 minutes: 11:14:32.932360500 Subtracting 45 seconds: 11:43:47.932360500 Subtracting 40000 nanoseconds: 11:44:32.932320500
LocalTime until 方法
使用 until
方法,我们可以计算到另一个时间的剩余时间(以指定的单位表示)。
import java.time.LocalTime; import java.time.temporal.ChronoUnit; void main() { LocalTime now = LocalTime.now(); LocalTime time = LocalTime.parse("22:15:30"); System.out.printf("%s hours%n", now.until(time, ChronoUnit.HOURS)); System.out.printf("%s minutes%n", now.until(time, ChronoUnit.MINUTES)); System.out.printf("%s seconds%n", now.until(time, ChronoUnit.SECONDS)); }
该示例计算了到另一个时间还需经过的小时、分钟和秒。
System.out.printf("%s hours%n", now.until(time, ChronoUnit.HOURS));
使用 ChronoUnit.HOURS
,我们指定以小时为单位计算时间差。
$ java Main.java 10 hours 630 minutes 37808 seconds
比较 LocalTime 对象
以下示例展示了如何比较时间。
import java.time.LocalTime; void main() { LocalTime time1 = LocalTime.of(4, 23, 12); LocalTime time2 = LocalTime.of(8, 03, 50); LocalTime time3 = LocalTime.of(12, 47, 35); if (time1.compareTo(time2) == 0) { System.out.println("time1 and time2 are equal"); } else { System.out.println("time1 and time2 are not equal"); } if (time2.isBefore(time3)) { System.out.println("time2 comes before time3"); } else { System.out.println("time2 does not come before time3"); } if (time3.isAfter(time1)) { System.out.println("time3 comes after time1"); } else { System.out.println("time3 does not come after time1"); } }
该示例比较时间。我们检查它们是否相等,是否早于或晚于另一个时间。
if (time1.compareTo(time2) == 0) {
compareTo
比较两个本地时间。
if (time2.isBefore(time3)) {
isBefore
检查一个时间是否早于另一个时间。
if (time3.isAfter(time1)) {
isAfter
检查一个时间是否晚于另一个时间。
$ java Main.java time1 and time2 are not equal time2 comes before time3 time3 comes after time1
truncatedTo 方法
LocalTime
的 truncatedTo
方法返回截断时间后的本地时间副本。
import java.time.LocalTime; import java.time.temporal.ChronoUnit; void main() { LocalTime now = LocalTime.now(); System.out.println(now); System.out.println(now.truncatedTo(ChronoUnit.HALF_DAYS)); System.out.println(now.truncatedTo(ChronoUnit.HOURS)); System.out.println(now.truncatedTo(ChronoUnit.MINUTES)); System.out.println(now.truncatedTo(ChronoUnit.SECONDS)); System.out.println(now.truncatedTo(ChronoUnit.MICROS)); }
该示例使用 truncatedTo
将时间截断为半天、小时、分钟、秒和微秒。
$ java Main.java 11:46:46.017153200 00:00 11:00 11:46 11:46:46 11:46:46.017153
来源
在本文中,我们使用了 Java LocalTime。
作者
列出所有Java教程。