Java 8日期时间类LocalDate、LocalDateTime详解
- LocalDateTime 是Java 8中的一个日期时间类,用于表示不带时区的日期时间信息。它包含了年、月、日、小时、分钟和秒等信息。
一、常见类型转换
1.1 String 转 Date
String dateTimeStr = "2024-08-07 15:45:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, formatter);
1.2 String 转 LocalDate
String str = "2023-10-20";
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(str, fmt);
1.3 String 转 LocalDateTime
String dateStr = "2023-09-03 21:00:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parsedDate = LocalDateTime.parse(dateStr, formatter);
1.4 Date 转 String
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(date);
1.5 Date 转 LocalDate
Date date = new Date();
ZoneId zoneId = ZoneId.systemDefault();
LocalDate localDate = date.toInstant().atZone(zoneId).toLocalDate();
1.6 Date 转 LocalDateTime
Date date = new Date();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = date.toInstant().atZone(zoneId).toLocalDateTime();
1.7 LocalDate 转 String
LocalDate today = LocalDate.now();
String dateStr = today.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
1.8 LocalDate 转 Date
LocalDate localDate = LocalDate.now();
ZoneId zoneId = ZoneId.systemDefault();
Date date = Date.from(localDate.atStartOfDay().atZone(zoneId).toInstant());
1.9 LocalDate 转 LocalDateTime
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime1 = localDate.atStartOfDay();
LocalDateTime localDateTime2 = localDate.atTime(8,20,33);
LocalDateTime localDateTime3 = localDate.atTime(LocalTime.now());
1.10 LocalDateTime 转 String
LocalDateTime dateTime = LocalDateTime.of(2024, 8, 7, 12, 30);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter);
1.11 LocalDateTime 转 Date
LocalDateTime localDateTime = LocalDateTime.now();
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
Date date = Date.from(zonedDateTime.toInstant());
1.12 LocalDateTime 转 LocalDate
LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDate = localDateTime.toLocalDate();
二、LocalDate类常用方法
LocalDate today = LocalDate.now()
| 方法 | 返回值、介绍 |
|---|
| getYear() | int 、 该日期的年份 |
| getMonth() | Month、 该日期月份的对象 |
| getMonthValue() | int 、 该日期的月份 |
| 查询、直接修改年份日期等 | 返回值、介绍 |
|---|
| getDayOfWeek().getValue() | int 、 该日期是当前周的第几天 |
| getDayOfMonth() | int 、 该日期是当前月的第几天 |
| getDayOfYear() | int 、 该日期是当前年的第几天 |
| withYear(int year) | LocalDate、 修改该日期的年份 |
| withYear(int year) | LocalDate、 修改该日期的月份 |
| withDayOfMonth(int dayOfMonth) | LocalDate 、 修改该日期在当月的天数 |
| 判断、比较 | 返回值、介绍 |
|---|
| isLeapYear() | boolean、 判断是否是闰年 |
| lengthOfYear() | int 、 判断该年份是356还是366天? |
| lengthOfMonth() | int 、 当前月份有多少天 |
| compareTo(ChronoLocalDate other) | int 、 比较该日期与other日期的大小,返回正数,那么当前对象时间较晚(数字较大) |
| isBefore(ChronoLocalDate other) | boolean、 比较该日期是否比参数日期早(true为早) |
| isAfter(ChronoLocalDate other) | boolean、 比较该日期是否比参数日期晚(true为晚) |
| isEqual(ChronoLocalDate other) | boolean、 比较两个日期是否相等 |
| 在原有基础上增加年份等 | 返回值、介绍 |
|---|
| plusYears(long yearsToAdd) | LocalDate 、 当前日期增加指定的年数 |
| plusMonths(long monthsToAdd) | LocalDate 、 当前日期增加指定的月份 |
| plusWeeks(long weeksToAdd) | LocalDate 、 当前日期增加指定的周数 |
| plusDays(long daysToAdd) | LocalDate 、 当前日期增加指定的天数 |
| 在原有基础上减少年份等 | 返回值、介绍 |
|---|
| minusYears(long yearsToSubtract) | LocalDate 、 当前日期减少指定的年数 |
| minusMonths(long monthsToSubtract) | LocalDate 、 当前日期减少指定的月份 |
| minusWeeks(long weeksToSubtract) | LocalDate 、 当前日期减少指定的周数 |
| minusDays(long daysToSubtract) | LocalDate 、 当前日期减少指定的天数 |
三、LocalDateTime类常用方法
- plusXxx() 和 minusXxx():用于对日期时间进行加减操作,其中 Xxx 可以是 Years、Months、Days、Hours、Minutes、Seconds、Nanos 等。
LocalDateTime dateTime = LocalDateTime.now();
LocalDateTime plusOneDay = dateTime.plusDays(1);
LocalDateTime minusOneHour = dateTime.minusHours(1);
- isBefore() 和 isAfter():用于比较两个日期时间的先后顺序。
LocalDateTime dateTime1 = LocalDateTime.of(2022, 1, 1, 12, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2022, 1, 2, 12, 0);
boolean isBefore = dateTime1.isBefore(dateTime2);
boolean isAfter = dateTime1.isAfter(dateTime2);
- isEqual():用于判断两个日期时间是否相等。
LocalDateTime dateTime1 = LocalDateTime.of(2022, 1, 1, 12, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2022, 1, 1, 12, 0);
boolean isEqual = dateTime1.isEqual(dateTime2);
- format():将日期时间格式化为字符串。
LocalDateTime dateTime = LocalDateTime.now();
String formattedDateTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));