多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Java `LocalTime` 原文:http://zetcode.com/java/localtime/ Java `LocalTime`教程显示了如何在 Java 中使用`LocalTime`。 我们计算当前的本地时间,解析本地时间,格式化本地时间,比较本地时间,并执行时间算法。 ## Java `LocalTime` `LocalTime`是 ISO-8601 日历系统中没有时区的时间。 `LocalTime`是不可变的日期时间对象。 `LocalTime`不存储或表示日期或时区。 它是对壁钟上当地时间的描述。 挂钟时间,也称为现实世界时间或挂钟时间,是指由诸如手表或挂钟之类的计时器确定的经过时间。 比较应使用`equals()`方法。 ## Java `LocalTime`当前时间 使用`LocalTime.now()`检索当前时间。 `JavaLocalTimeNow.java` ```java package com.zetcode; import java.time.LocalTime; public class JavaLocalTimeNow { public static void main(String[] args) { LocalTime now = LocalTime.now(); System.out.println(now); } } ``` 该示例显示本地当前时间。 ```java 18:12:05.172 ``` 这是输出。 ## Java `LocalTime`创建 有几种在 Java 中创建`LocalTime`的方法。 `JavaLocalTimeCreate.java` ```java package com.zetcode; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; public class JavaLocalTimeCreate { public static void main(String[] args) { // 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); } } ``` 该示例提出了四种方法 ```java LocalTime time1 = LocalTime.now(); ``` `LocalTime.now()`创建当前本地时间。 ```java LocalTime time2 = LocalTime.of(7, 20, 45, 342123342); ``` 使用`LocalTime.of()`,我们可以创建一个小时,分钟,秒和纳秒的特定本地时间。 ```java LocalTime time3 = LocalTime.parse("12:32:22", DateTimeFormatter.ISO_TIME); ``` 使用`LocalTime.parse()`,我们从字符串中解析`LocalTime`。 ```java LocalTime time4 = LocalDateTime.now().toLocalTime(); ``` 也可以从`LocalDateTime`对象获取`LocalTime`。 ```java 18:18:12.135 07:20:45.342123342 12:32:22 18:18:12.186 ``` 这是输出。 ## Java `LocalTime`时,分,秒 下面的示例将本地时间分为小时,分钟和秒部分。 `JavaLocalTimeParts.java` ```java package com.zetcode; import java.time.LocalTime; public class JavaLocalTimeParts { public static void main(String[] args) { 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 Hour: 18 Minute: 25 Second: 55 ``` 这是输出。 ## Java `LocalTime`时区 我们可以计算特定时区的本地时间。 但是,`LocalTime`不存储时区信息。 `JavaLocalTimeZone.java` ```java package com.zetcode; import java.time.LocalTime; import java.time.ZoneId; import java.time.temporal.ChronoUnit; public class JavaLocalTimeZone { public static void main(String[] args) { 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); } } ``` 该示例找出了莫斯科和布拉迪斯拉发的当前本地时间。 我们还计算了两个城市之间的时差。 ```java ZoneId zone1 = ZoneId.of("Europe/Bratislava"); ZoneId zone2 = ZoneId.of("Europe/Moscow"); ``` 我们使用`ZoneId.of()`方法指定时区。 ```java LocalTime now1 = LocalTime.now(zone1); LocalTime now2 = LocalTime.now(zone2); ``` 为了创建当地时间,我们将区域传递给`LocalTime.now()`。 ```java long hoursBetween = ChronoUnit.HOURS.between(now1, now2); long minutesBetween = ChronoUnit.MINUTES.between(now1, now2); ``` 我们以小时和分钟为单位计算两个城市之间的差异。 ```java Bratislava time: 11:00:42.704 Moscow time: 13:00:42.732 2 120 ``` 这是输出。 ## Java `LocalTime`格式 不同国家/地区的时间格式不同。 `DateTimeFormatter`帮助我们格式化时间。 `JavaLocalTimeFormat.java` ```java package com.zetcode; import java.time.LocalTime; import java.time.format.DateTimeFormatter; public class JavaLocalTimeFormat { public static void main(String[] args) { 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`格式化时间。 ```java DateTimeFormatter dtf = DateTimeFormatter.ISO_TIME; System.out.println(now.format(dtf)); ``` 我们将时间格式化为 ISO 格式的时间标准。 ```java DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("hh:mm:ss"); ``` 我们可以使用`DateTimeFormatter.ofPattern()`选择特定的时间格式。 `DateTimeFormatter`的文档包含了我们可以使用的各种格式字符的描述。 ```java 11:08:56.483 11:08:56 11:08:56 AM ``` 这是输出。 ## Java `LocalTime`算法 Java `LocalTime`具有执行时间算术的方法。 `JavaLocalTimeArithmetic.java` ```java package com.zetcode; import java.time.LocalTime; public class JavaLocalTimeArithmetic { public static void main(String[] args) { 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)); } } ``` 该示例介绍了添加和减去时间单位的方法。 ```java System.out.println("Adding 3 hours: " + localTime.plusHours(3)); ``` `plusHours()`将当前本地时间增加三个小时。 ```java System.out.println("Subtracting 3 hours: " + now.minusHours(3)); ``` 同样,`minusHours()`从当前本地时间中减去三个小时。 ```java Current Time: 11:12:51.155 Adding 3 hours: 14:12:51.155 Adding 30 minutes: 11:42:51.155 Adding 45 seconds: 11:13:36.155 Adding 40000 nanoseconds: 11:12:51.155040 Subtracting 3 hours: 08:12:51.155 Subtracting 30 minutes: 10:42:51.155 Subtracting 45 seconds: 11:12:06.155 Subtracting 40000 nanoseconds: 11:12:51.154960 ``` 这是输出。 ## Java `LocalTime until()` 使用`until()`方法,我们可以根据指定的单位计算到另一个时间的时间。 `JavaLocalTimeUntil.java` ```java package com.zetcode; import java.time.LocalTime; import java.time.temporal.ChronoUnit; public class JavaLocalTimeUntil { public static void main(String[] args) { 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)); } } ``` 该示例以小时,分钟和秒为单位计算到另一个时间为止必须经过的时间。 ```java System.out.printf("%s hours%n", now.until(time, ChronoUnit.HOURS)); ``` 使用`ChronoUnit.HOURS`,我们指定以小时为单位计算时间差。 ```java 10 hours 657 minutes 39476 seconds ``` 这是示例的输出。 ## Java `LocalTime`比较 以下示例显示了如何比较时间。 `JavaLocalTimeCompare.java` ```java package com.zetcode; import java.time.LocalTime; public class JavaLocalTimeCompare { public static void main(String[] args) { 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"); } } } ``` 该示例比较时间。 我们检查它们是否相等,是否在另一个时间之前或之后。 ```java if (time1.compareTo(time2) == 0) { ``` `compareTo()`比较两个本地时间。 ```java if (time2.isBefore(time3)) { ``` `isBefore()`检查时间是否在另一个时间之前。 ```java if (time3.isAfter(time1)) { ``` `isAfter()`检查时间是否在另一个时间之后。 ```java time1 and time2 are not equal time2 comes before time3 time3 comes after time1 ``` 这是输出。 ## Java `LocalTime`截断 `LocalTime`的`truncatedTo()`方法返回具有被截断时间的本地时间的副本。 `JavaLocaTimeTruncate.java` ```java package com.zetcode; import java.time.LocalTime; import java.time.temporal.ChronoUnit; public class JavaLocaTimeTruncate { public static void main(String[] args) { 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 11:27:56.309 00:00 11:00 11:27 11:27:56 11:27:56.309 ``` 这是输出。 在本教程中,我们使用了 Java `LocalTime`。 您可能也对相关教程感兴趣: [Java 教程](/lang/java/), [Java `HashSet`教程](/java/hashset), [Java `TemporalAdjusters`教程](/java/temporaladjusters/),[用 Java 阅读文本文件](/articles/javareadtext/) 和[用 Java 读写 ICO 图像](/articles/javaico/)。