原文:http://zetcode.com/java/localtime/

Java LocalTime教程显示了如何在 Java 中使用LocalTime。 我们计算当前的本地时间,解析本地时间,格式化本地时间,比较本地时间,并执行时间算法。

Java LocalTime

LocalTime是 ISO-8601 日历系统中没有时区的时间。 LocalTime是不可变的日期时间对象。

LocalTime不存储或表示日期或时区。 它是对壁钟上当地时间的描述。 挂钟时间,也称为现实世界时间或挂钟时间,是指由诸如手表或挂钟之类的计时器确定的经过时间。

比较应使用equals()方法。

Java LocalTime当前时间

使用LocalTime.now()检索当前时间。

JavaLocalTimeNow.java

  1. package com.zetcode;
  2. import java.time.LocalTime;
  3. public class JavaLocalTimeNow {
  4. public static void main(String[] args) {
  5. LocalTime now = LocalTime.now();
  6. System.out.println(now);
  7. }
  8. }

该示例显示本地当前时间。

  1. 18:12:05.172

这是输出。

Java LocalTime创建

有几种在 Java 中创建LocalTime的方法。

JavaLocalTimeCreate.java

  1. package com.zetcode;
  2. import java.time.LocalDateTime;
  3. import java.time.LocalTime;
  4. import java.time.format.DateTimeFormatter;
  5. public class JavaLocalTimeCreate {
  6. public static void main(String[] args) {
  7. // Current Time
  8. LocalTime time1 = LocalTime.now();
  9. System.out.println(time1);
  10. // Specific Time
  11. LocalTime time2 = LocalTime.of(7, 20, 45, 342123342);
  12. System.out.println(time2);
  13. // Specific Time
  14. LocalTime time3 = LocalTime.parse("12:32:22",
  15. DateTimeFormatter.ISO_TIME);
  16. System.out.println(time3);
  17. // Retrieving from LocalDateTime
  18. LocalTime time4 = LocalDateTime.now().toLocalTime();
  19. System.out.println(time4);
  20. }
  21. }

该示例提出了四种方法

  1. LocalTime time1 = LocalTime.now();

LocalTime.now()创建当前本地时间。

  1. LocalTime time2 = LocalTime.of(7, 20, 45, 342123342);

使用LocalTime.of(),我们可以创建一个小时,分钟,秒和纳秒的特定本地时间。

  1. LocalTime time3 = LocalTime.parse("12:32:22",
  2. DateTimeFormatter.ISO_TIME);

使用LocalTime.parse(),我们从字符串中解析LocalTime

  1. LocalTime time4 = LocalDateTime.now().toLocalTime();

也可以从LocalDateTime对象获取LocalTime

  1. 18:18:12.135
  2. 07:20:45.342123342
  3. 12:32:22
  4. 18:18:12.186

这是输出。

Java LocalTime时,分,秒

下面的示例将本地时间分为小时,分钟和秒部分。

JavaLocalTimeParts.java

  1. package com.zetcode;
  2. import java.time.LocalTime;
  3. public class JavaLocalTimeParts {
  4. public static void main(String[] args) {
  5. LocalTime time = LocalTime.now();
  6. System.out.printf("Hour: %s%n", time.getHour());
  7. System.out.printf("Minute: %s%n", time.getMinute());
  8. System.out.printf("Second: %s%n", time.getSecond());
  9. }
  10. }

getHour()获得小时部分,getMinute()获得分钟部分,getSecond()获得LocalTime的第二部分。

  1. Hour: 18
  2. Minute: 25
  3. Second: 55

这是输出。

Java LocalTime时区

我们可以计算特定时区的本地时间。 但是,LocalTime不存储时区信息。

JavaLocalTimeZone.java

  1. package com.zetcode;
  2. import java.time.LocalTime;
  3. import java.time.ZoneId;
  4. import java.time.temporal.ChronoUnit;
  5. public class JavaLocalTimeZone {
  6. public static void main(String[] args) {
  7. ZoneId zone1 = ZoneId.of("Europe/Bratislava");
  8. ZoneId zone2 = ZoneId.of("Europe/Moscow");
  9. LocalTime now1 = LocalTime.now(zone1);
  10. LocalTime now2 = LocalTime.now(zone2);
  11. System.out.printf("Bratislava time: %s%n", now1);
  12. System.out.printf("Moscow time: %s%n", now2);
  13. long hoursBetween = ChronoUnit.HOURS.between(now1, now2);
  14. long minutesBetween = ChronoUnit.MINUTES.between(now1, now2);
  15. System.out.println(hoursBetween);
  16. System.out.println(minutesBetween);
  17. }
  18. }

该示例找出了莫斯科和布拉迪斯拉发的当前本地时间。 我们还计算了两个城市之间的时差。

  1. ZoneId zone1 = ZoneId.of("Europe/Bratislava");
  2. ZoneId zone2 = ZoneId.of("Europe/Moscow");

我们使用ZoneId.of()方法指定时区。

  1. LocalTime now1 = LocalTime.now(zone1);
  2. LocalTime now2 = LocalTime.now(zone2);

为了创建当地时间,我们将区域传递给LocalTime.now()

  1. long hoursBetween = ChronoUnit.HOURS.between(now1, now2);
  2. long minutesBetween = ChronoUnit.MINUTES.between(now1, now2);

我们以小时和分钟为单位计算两个城市之间的差异。

  1. Bratislava time: 11:00:42.704
  2. Moscow time: 13:00:42.732
  3. 2
  4. 120

这是输出。

Java LocalTime格式

不同国家/地区的时间格式不同。 DateTimeFormatter帮助我们格式化时间。

JavaLocalTimeFormat.java

  1. package com.zetcode;
  2. import java.time.LocalTime;
  3. import java.time.format.DateTimeFormatter;
  4. public class JavaLocalTimeFormat {
  5. public static void main(String[] args) {
  6. LocalTime now = LocalTime.now();
  7. DateTimeFormatter dtf = DateTimeFormatter.ISO_TIME;
  8. System.out.println(now.format(dtf));
  9. DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("hh:mm:ss");
  10. System.out.println(now.format(dtf2));
  11. DateTimeFormatter dtf3 = DateTimeFormatter.ofPattern("hh:mm:ss a");
  12. System.out.println(now.format(dtf3));
  13. }
  14. }

该示例使用DateTimeFormatter格式化时间。

  1. DateTimeFormatter dtf = DateTimeFormatter.ISO_TIME;
  2. System.out.println(now.format(dtf));

我们将时间格式化为 ISO 格式的时间标准。

  1. DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("hh:mm:ss");

我们可以使用DateTimeFormatter.ofPattern()选择特定的时间格式。 DateTimeFormatter的文档包含了我们可以使用的各种格式字符的描述。

  1. 11:08:56.483
  2. 11:08:56
  3. 11:08:56 AM

这是输出。

Java LocalTime算法

Java LocalTime具有执行时间算术的方法。

JavaLocalTimeArithmetic.java

  1. package com.zetcode;
  2. import java.time.LocalTime;
  3. public class JavaLocalTimeArithmetic {
  4. public static void main(String[] args) {
  5. LocalTime now = LocalTime.now();
  6. System.out.println("Current Time: " + now);
  7. // LocalTime addition
  8. System.out.println("Adding 3 hours: " + now.plusHours(3));
  9. System.out.println("Adding 30 minutes: " + now.plusMinutes(30));
  10. System.out.println("Adding 45 seconds: " + now.plusSeconds(45));
  11. System.out.println("Adding 40000 nanoseconds: " + now.plusNanos(40000));
  12. // LocalTime subtraction
  13. System.out.println("Subtracting 3 hours: " + now.minusHours(3));
  14. System.out.println("Subtracting 30 minutes: " + now.minusMinutes(30));
  15. System.out.println("Subtracting 45 seconds: " + now.minusSeconds(45));
  16. System.out.println("Subtracting 40000 nanoseconds: " + now.minusNanos(40000));
  17. }
  18. }

该示例介绍了添加和减去时间单位的方法。

  1. System.out.println("Adding 3 hours: " + localTime.plusHours(3));

plusHours()将当前本地时间增加三个小时。

  1. System.out.println("Subtracting 3 hours: " + now.minusHours(3));

同样,minusHours()从当前本地时间中减去三个小时。

  1. Current Time: 11:12:51.155
  2. Adding 3 hours: 14:12:51.155
  3. Adding 30 minutes: 11:42:51.155
  4. Adding 45 seconds: 11:13:36.155
  5. Adding 40000 nanoseconds: 11:12:51.155040
  6. Subtracting 3 hours: 08:12:51.155
  7. Subtracting 30 minutes: 10:42:51.155
  8. Subtracting 45 seconds: 11:12:06.155
  9. Subtracting 40000 nanoseconds: 11:12:51.154960

这是输出。

Java LocalTime until()

使用until()方法,我们可以根据指定的单位计算到另一个时间的时间。

JavaLocalTimeUntil.java

  1. package com.zetcode;
  2. import java.time.LocalTime;
  3. import java.time.temporal.ChronoUnit;
  4. public class JavaLocalTimeUntil {
  5. public static void main(String[] args) {
  6. LocalTime now = LocalTime.now();
  7. LocalTime time = LocalTime.parse("22:15:30");
  8. System.out.printf("%s hours%n", now.until(time, ChronoUnit.HOURS));
  9. System.out.printf("%s minutes%n", now.until(time, ChronoUnit.MINUTES));
  10. System.out.printf("%s seconds%n", now.until(time, ChronoUnit.SECONDS));
  11. }
  12. }

该示例以小时,分钟和秒为单位计算到另一个时间为止必须经过的时间。

  1. System.out.printf("%s hours%n", now.until(time, ChronoUnit.HOURS));

使用ChronoUnit.HOURS,我们指定以小时为单位计算时间差。

  1. 10 hours
  2. 657 minutes
  3. 39476 seconds

这是示例的输出。

Java LocalTime比较

以下示例显示了如何比较时间。

JavaLocalTimeCompare.java

  1. package com.zetcode;
  2. import java.time.LocalTime;
  3. public class JavaLocalTimeCompare {
  4. public static void main(String[] args) {
  5. LocalTime time1 = LocalTime.of(4, 23, 12);
  6. LocalTime time2 = LocalTime.of(8, 03, 50);
  7. LocalTime time3 = LocalTime.of(12, 47, 35);
  8. if (time1.compareTo(time2) == 0) {
  9. System.out.println("time1 and time2 are equal");
  10. } else {
  11. System.out.println("time1 and time2 are not equal");
  12. }
  13. if (time2.isBefore(time3)) {
  14. System.out.println("time2 comes before time3");
  15. } else {
  16. System.out.println("time2 does not come before time3");
  17. }
  18. if (time3.isAfter(time1)) {
  19. System.out.println("time3 comes after time1");
  20. } else {
  21. System.out.println("time3 does not come after time1");
  22. }
  23. }
  24. }

该示例比较时间。 我们检查它们是否相等,是否在另一个时间之前或之后。

  1. if (time1.compareTo(time2) == 0) {

compareTo()比较两个本地时间。

  1. if (time2.isBefore(time3)) {

isBefore()检查时间是否在另一个时间之前。

  1. if (time3.isAfter(time1)) {

isAfter()检查时间是否在另一个时间之后。

  1. time1 and time2 are not equal
  2. time2 comes before time3
  3. time3 comes after time1

这是输出。

Java LocalTime截断

LocalTimetruncatedTo()方法返回具有被截断时间的本地时间的副本。

JavaLocaTimeTruncate.java

  1. package com.zetcode;
  2. import java.time.LocalTime;
  3. import java.time.temporal.ChronoUnit;
  4. public class JavaLocaTimeTruncate {
  5. public static void main(String[] args) {
  6. LocalTime now = LocalTime.now();
  7. System.out.println(now);
  8. System.out.println(now.truncatedTo(ChronoUnit.HALF_DAYS));
  9. System.out.println(now.truncatedTo(ChronoUnit.HOURS));
  10. System.out.println(now.truncatedTo(ChronoUnit.MINUTES));
  11. System.out.println(now.truncatedTo(ChronoUnit.SECONDS));
  12. System.out.println(now.truncatedTo(ChronoUnit.MICROS));
  13. }
  14. }

该示例使用truncatedTo()将时间截断为半天,小时,分钟,秒和微秒。

  1. 11:27:56.309
  2. 00:00
  3. 11:00
  4. 11:27
  5. 11:27:56
  6. 11:27:56.309

这是输出。

在本教程中,我们使用了 Java LocalTime。 您可能也对相关教程感兴趣: Java 教程Java HashSet教程Java TemporalAdjusters教程用 Java 阅读文本文件用 Java 读写 ICO 图像