Java.time.localdatetime详解:从使用到示例

发布时间:2023-05-18

Java.time.localdatetime

Java.time.localdatetime是Java 8中新的日期/时间库的一部分。它代表一个包含日期和时间的对象,不包含时区和偏移量,并使用ISO-8601日历系统。在本文中,我们将从不同的角度来深入了解localdatetime,包括它的创建、格式化、计算和转换,最后通过几个示例来展示其用法和实际应用。

一、创建localdatetime

创建一个localdatetime对象的方法有很多。下面是几个常用的方法。

1. 使用now()方法创建

使用now()方法可以创建一个包含当前日期时间的localdatetime对象。

LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);

输出结果:2021-11-05T16:06:15.201997200

2. 使用of()方法创建

使用of()方法可以创建指定日期和时间的localdatetime对象。

LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 5, 16, 10, 30);
System.out.println(localDateTime);

输出结果:2021-11-05T16:10:30

3. 使用parse()方法创建

使用parse()方法可以将一个字符串解析成一个localdatetime对象。

String datetimeString = "2021-11-05T16:15:45";
LocalDateTime localDateTime = LocalDateTime.parse(datetimeString);
System.out.println(localDateTime);

输出结果:2021-11-05T16:15:45

二、格式化localdatetime

在实际应用中,通常需要将localdatetime对象转换成指定格式的字符串。Java 8中提供了DateTimeFormatter类用来格式化日期时间。

1. 使用默认格式化方式

使用默认的DateTimeFormatter格式化方式可以将localdatetime对象转换成ISO-8601格式的字符串。

LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
String formattedDateTime = localDateTime.format(formatter);
System.out.println(formattedDateTime);

输出结果:2021-11-05T16:20:15.158256100

2. 自定义格式化方式

使用自定义的DateTimeFormatter格式化方式可以将localdatetime对象转换成指定格式的字符串。

LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = localDateTime.format(formatter);
System.out.println(formattedDateTime);

输出结果:2021-11-05 16:25:45

三、计算localdatetime

在实际应用中,经常需要对日期时间进行加减操作。Java 8中提供了plus()minus()方法用来进行加减运算。

1. 加法运算

使用plus方法进行加法运算。

LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime plusDateTime = localDateTime.plus(Duration.ofHours(1));
System.out.println(plusDateTime);

输出结果:2021-11-05T17:33:07.755248100

2. 减法运算

使用minus方法进行减法运算。

LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime minusDateTime = localDateTime.minus(Duration.ofHours(1));
System.out.println(minusDateTime);

输出结果:2021-11-05T15:28:45.931275500

四、转换localdatetime

在实际应用中,通常需要将localdatetime对象转换成其他类型的对象。Java 8中提供了toLocalDate()toLocalTime()toInstant()方法用来进行转换。

1. 转换成LocalDate

使用toLocalDate方法可以将localdatetime对象转换成LocalDate对象。

LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDate = localDateTime.toLocalDate();
System.out.println(localDate);

输出结果:2021-11-05

2. 转换成LocalTime

使用toLocalTime方法可以将localdatetime对象转换成LocalTime对象。

LocalDateTime localDateTime = LocalDateTime.now();
LocalTime localTime = localDateTime.toLocalTime();
System.out.println(localTime);

输出结果:17:53:29.707716600

3. 转换成Instant

使用toInstant方法可以将localdatetime对象转换成Instant对象。

LocalDateTime localDateTime = LocalDateTime.now();
Instant instant = localDateTime.toInstant(ZoneOffset.of("+8"));
System.out.println(instant);

输出结果:2021-11-05T09:56:15.784Z

五、示例应用

下面通过几个示例来展示localdatetime的用法和实际应用。

1. 计算两个时间的差

计算两个时间的差可以使用Duration类的between()方法。

LocalDateTime localDateTime1 = LocalDateTime.of(2021, 11, 5, 18, 0, 0);
LocalDateTime localDateTime2 = LocalDateTime.of(2021, 11, 5, 15, 0, 0);
Duration duration = Duration.between(localDateTime1, localDateTime2);
System.out.println(duration.toHours());

输出结果:-3

2. 判断是否在某个时间段内

判断localdatetime对象是否在某个时间段内可以使用isAfter()isBefore()方法。

LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime startDateTime = LocalDateTime.of(2021, 11, 5, 9, 0, 0);
LocalDateTime endDateTime = LocalDateTime.of(2021, 11, 5, 18, 0, 0);
boolean isBetween = localDateTime.isAfter(startDateTime) && localDateTime.isBefore(endDateTime);
System.out.println(isBetween);

输出结果:true

3. 判断是否为闰年

判断localdatetime所代表的年份是否为闰年可以使用isLeapYear()方法。

LocalDateTime localDateTime = LocalDateTime.now();
boolean isLeapYear = localDateTime.toLocalDate().isLeapYear();
System.out.println(isLeapYear);

输出结果:false