Java LocalTime
教程显示了如何在 Java 中使用 LocalTime。 我们计算当前的本地时间,解析本地时间,格式化本地时间,比较本地时间,并执行时间算法。
Java LocalTime
LocalTime 是 ISO-8601 日历系统中没有时区的时间。 LocalTime
是不可变的日期时间对象。
LocalTime
不存储或表示日期或时区。 它是对壁钟上当地时间的描述。 挂钟时间,也称为现实世界时间或挂钟时间,是指由诸如手表或挂钟之类的计时器确定的经过时间。
比较应使用equals()
方法。
Java LocalTime
当前时间
使用LocalTime.now()
检索当前时间。
JavaLocalTimeNow.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);
}
}
该示例显示本地当前时间。
18:12:05.172
这是输出。
Java LocalTime
创建
有几种在 Java 中创建LocalTime
的方法。
JavaLocalTimeCreate.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);
}
}
该示例提出了四种方法
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
。
18:18:12.135
07:20:45.342123342
12:32:22
18:18:12.186
This is the output.
Java LocalTime
时,分,秒
下面的示例将本地时间分为小时,分钟和秒部分。
JavaLocalTimeParts.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
的第二部分。
Hour: 18
Minute: 25
Second: 55
This is the output.
Java LocalTime
时区
我们可以计算特定时区的本地时间。 但是,LocalTime
不存储时区信息。
JavaLocalTimeZone.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);
}
}
该示例找出了莫斯科和布拉迪斯拉发的当前本地时间。 我们还计算了两个城市之间的时差。
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);
我们以小时和分钟为单位计算两个城市之间的差异。
Bratislava time: 11:00:42.704
Moscow time: 13:00:42.732
2
120
This is the output.
Java LocalTime
格式
不同国家/地区的时间格式不同。 DateTimeFormatter
帮助我们格式化时间。
JavaLocalTimeFormat.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
格式化时间。
DateTimeFormatter dtf = DateTimeFormatter.ISO_TIME;
System.out.println(now.format(dtf));
我们将时间格式化为 ISO 格式的时间标准。
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("hh:mm:ss");
我们可以使用DateTimeFormatter.ofPattern()
选择特定的时间格式。 DateTimeFormatter
的文档包含了我们可以使用的各种格式字符的描述。
11:08:56.483
11:08:56
11:08:56 AM
This is the output.
Java LocalTime
算法
Java LocalTime
具有执行时间算术的方法。
JavaLocalTimeArithmetic.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));
}
}
该示例介绍了添加和减去时间单位的方法。
System.out.println("Adding 3 hours: " + localTime.plusHours(3));
plusHours()
将当前本地时间增加三个小时。
System.out.println("Subtracting 3 hours: " + now.minusHours(3));
同样,minusHours()
从当前本地时间中减去三个小时。
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
This is the output.
Java LocalTime until()
使用until()
方法,我们可以根据指定的单位计算到另一个时间的时间。
JavaLocalTimeUntil.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));
}
}
该示例以小时,分钟和秒为单位计算到另一个时间为止必须经过的时间。
System.out.printf("%s hours%n", now.until(time, ChronoUnit.HOURS));
使用ChronoUnit.HOURS
,我们指定以小时为单位计算时间差。
10 hours
657 minutes
39476 seconds
这是示例的输出。
Java LocalTime
比较
以下示例显示了如何比较时间。
JavaLocalTimeCompare.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");
}
}
}
该示例比较时间。 我们检查它们是否相等,是否在另一个时间之前或之后。
if (time1.compareTo(time2) == 0) {
compareTo()
比较两个本地时间。
if (time2.isBefore(time3)) {
isBefore()
检查时间是否在另一个时间之前。
if (time3.isAfter(time1)) {
isAfter()
检查时间是否在另一个时间之后。
time1 and time2 are not equal
time2 comes before time3
time3 comes after time1
This is the output.
Java LocalTime
截断
LocalTime's
truncatedTo()
方法返回具有被截断时间的本地时间的副本。
JavaLocaTimeTruncate.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()
将时间截断为半天,小时,分钟,秒和微秒。
11:27:56.309
00:00
11:00
11:27
11:27:56
11:27:56.309
This is the output.