# 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/)。