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