Java LocalDateTime
最后修改日期:2024 年 7 月 10 日
在本文中,我们将展示如何在 Java 中使用 LocalDateTime。
LocalDateTime 是一个不可变的日期时间对象,表示一个日期时间。它是 ISO-8601 日历系统中没有时区的日期时间。
LocalDateTime
不存储或表示时区。如果没有额外的偏移量或时区等信息,它无法表示时间线上的一个瞬间。例如,值 2022-10-27T11:01:19.031990446 就是一个 LocalDateTime
。
当前日期时间
使用 LocalDateTime.now
获取当前时间。
import java.time.LocalDateTime; void main() { var now = LocalDateTime.now(); System.out.println(now); }
该示例打印当前本地日期时间值。
$ java Main.java 2024-07-10T14:20:27.792280600
创建 LocalDateTime 对象
有几种方法可以创建 LocalDateTime
。
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; void main() { var now = LocalDateTime.now(); System.out.println(now); LocalDateTime dt1 = LocalDateTime.of(2022, 10, 27, 10, 40, 55); System.out.println(dt1); LocalDateTime dt2 = LocalDateTime.parse("2020-11-27T11:20:50", DateTimeFormatter.ISO_LOCAL_DATE_TIME); System.out.println(dt2); }
该程序创建三个日期时间对象。
var now = LocalDateTime.now();
使用 LocalDateTime.now
创建当前日期时间。
LocalDateTime dt1 = LocalDateTime.of(2022, 10, 27, 10, 40, 55);
这里使用 LocalDateTime.of
创建一个本地日期时间值。 我们指定年、月、日、小时和秒部分。
LocalDateTime dt2 = LocalDateTime.parse("2020-11-27T11:20:50", DateTimeFormatter.ISO_LOCAL_DATE_TIME);
从字符串解析本地日期时间值。
$ java Main.java 2024-07-10T14:21:17.484172200 2022-10-27T10:40:55 2020-11-27T11:20:50
LocalDateTime 部分
在下一个示例中,我们获取当前的 LocalDateTime
值部分。
import java.time.LocalDateTime; void main() { LocalDateTime dt = LocalDateTime.now(); System.out.printf("Year: %s%n", dt.getYear()); System.out.printf("Month: %s%n", dt.getMonth()); System.out.printf("Day of month: %s%n", dt.getDayOfMonth()); System.out.printf("Hour: %s%n", dt.getHour()); System.out.printf("Minute: %s%n", dt.getMinute()); System.out.printf("Second: %s%n", dt.getSecond()); }
getYear
获取年份部分,getMonth
获取月份部分,getDayOfMonth
获取月份中的天数。 getHour
获取小时部分,getMinute
获取分钟部分,getSecond
获取秒部分。
$ java Main.java Year: 2024 Month: JULY Day of month: 10 Hour: 14 Minute: 17 Second: 2
LocalDateTime & DateTimeFormatter
在不同的国家/地区,日期时间的格式不同。 DateTimeFormatter
帮助我们格式化日期时间。
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; void main() { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter dtf = DateTimeFormatter.ISO_TIME; System.out.println(now.format(dtf)); DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("EEEE, MMM dd, yyyy HH:mm:ss a"); System.out.println(now.format(dtf2)); DateTimeFormatter dtf3 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM); System.out.println(now.format(dtf3)); }
该示例使用 DateTimeFormatter
格式化时间。
DateTimeFormatter dtf = DateTimeFormatter.ISO_TIME; System.out.println(now.format(dtf));
我们将时间格式化为 ISO 格式时间标准。
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("EEEE, MMM dd, yyyy HH:mm:ss a");
我们可以使用 DateTimeFormatter.ofPattern
选择特定的时间格式。 DateTimeFormatter
的文档包含我们可以使用的各种格式化字符的描述。
DateTimeFormatter dtf3 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
这里我们使用 FormatStyle.MEDIUM
格式。
$ java Main.java 14:17:39.5461673 streda, júl 10, 2024 14:17:39 PM 10. 7. 2024, 14:17:39
LocalTime 算术
Java LocalDateTimeEx
具有用于进行日期时间算术的方法。
import java.time.LocalDateTime; void main() { LocalDateTime now = LocalDateTime.now(); System.out.println(now); // LocalDateTime addition System.out.println("Adding 4 years: " + now.plusYears(4)); System.out.println("Adding 11 months: " + now.plusMonths(11)); System.out.println("Adding 54 days: " + now.plusDays(54)); 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)); System.out.println("-------------------------------------"); // LocalDateTime subtraction System.out.println("Subtracting 4 years: " + now.minusYears(4)); System.out.println("Subtracting 11 months: " + now.minusMonths(11)); System.out.println("Subtracting 54 days: " + now.minusDays(54)); 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 2024-07-10T14:18:29.986426300 Adding 4 years: 2028-07-10T14:18:29.986426300 Adding 11 months: 2025-06-10T14:18:29.986426300 Adding 54 days: 2024-09-02T14:18:29.986426300 Adding 3 hours: 2024-07-10T17:18:29.986426300 Adding 30 minutes: 2024-07-10T14:48:29.986426300 Adding 45 seconds: 2024-07-10T14:19:14.986426300 Adding 40000 nanoseconds: 2024-07-10T14:18:29.986466300 ------------------------------------- Subtracting 4 years: 2020-07-10T14:18:29.986426300 Subtracting 11 months: 2023-08-10T14:18:29.986426300 Subtracting 54 days: 2024-05-17T14:18:29.986426300 Subtracting 3 hours: 2024-07-10T11:18:29.986426300 Subtracting 30 minutes: 2024-07-10T13:48:29.986426300 Subtracting 45 seconds: 2024-07-10T14:17:44.986426300 Subtracting 40000 nanoseconds: 2024-07-10T14:18:29.986386300
LocalTime until
使用 until
方法,我们可以计算到另一个时间的时间,以指定的单位表示。
import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; void main() { LocalDateTime now = LocalDateTime.now(); LocalDateTime xmas = LocalDateTime.of(now.getYear(), 12, 24, 0, 0 ,0); System.out.println(now); System.out.println(xmas); System.out.printf("%s hours%n", now.until(xmas, ChronoUnit.HOURS)); System.out.printf("%s minutes%n", now.until(xmas, ChronoUnit.MINUTES)); System.out.printf("%s seconds%n", now.until(xmas, ChronoUnit.SECONDS)); }
该示例计算到另一个时间必须经过的小时、分钟和秒数。
System.out.printf("%s hours%n", now.until(time, ChronoUnit.HOURS));
使用 ChronoUnit.HOURS
,我们指定以小时为单位计算时间差。
$ java Main.java 2024-07-10T14:19:00.847871600 2024-12-24T00:00 3993 hours 239620 minutes 14377259 seconds
LocalTime isBefore/isAfter
我们可以使用 isBefore
和 isAfter
检查日期时间值是否在另一个日期时间值之前或之后。
import java.time.LocalDateTime; void main() { LocalDateTime now = LocalDateTime.now(); LocalDateTime dt1 = now.plusYears(3); LocalDateTime dt2 = now.minusYears(3); if (dt1.isAfter(now)) { System.out.printf("%s is after %s%n", dt1, now); } if (dt2.isBefore(now)) { System.out.printf("%s is before %s%n", dt2, now); } }
该程序使用 isBefore
和 isAfter
方法来检查当前日期时间值与另外两个日期时间值。
$ java Main.java 2025-10-27T12:25:45.261416509 is after 2022-10-27T12:25:45.261416509 2019-10-27T12:25:45.261416509 is before 2022-10-27T12:25:45.261416509
LocalDateTime 截断
LocalDateTime
的 truncatedTo
方法返回截断时间的本地时间的副本。 它返回原始日期时间的副本,其中小于指定单位的字段设置为零。
import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; void main() { LocalDateTime now = LocalDateTime.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 2024-07-10T14:19:49.389096800 2024-07-10T12:00 2024-07-10T14:00 2024-07-10T14:19 2024-07-10T14:19:49 2024-07-10T14:19:49.389096
来源
在本文中,我们使用了 Java LocalDateTime。
作者
列出所有Java教程。