Java8 LocalDateTime是什么?日期时间转换全解析
作者:isHuPei
还在为 Java 日期时间处理发愁?本文详细讲解 LocalDateTime 和 LocalDate 的常见类型转换,包括 String、Date 互转,以及获取年份、判断闰年、日期加减等常用方法,帮你快速掌握 Java 8 日期时间 API
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 对象
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
// 要转换的 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 date = new Date();
// 创建 SimpleDateFormat 对象,定义日期时间格式
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 格式化 Date 对象为字符串
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(); //返回localDate今天的起始时间 LocalDateTime localDateTime2 = localDate.atTime(8,20,33); LocalDateTime localDateTime3 = localDate.atTime(LocalTime.now());
1.10 LocalDateTime 转 String
// 创建一个 LocalDateTime 对象
LocalDateTime dateTime = LocalDateTime.of(2024, 8, 7, 12, 30);
// 定义日期时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 格式化 LocalDateTime 对象为字符串
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); // true boolean isAfter = dateTime1.isAfter(dateTime2); // false
- isEqual():用于判断两个日期时间是否相等。
LocalDateTime dateTime1 = LocalDateTime.of(2022, 1, 1, 12, 0); LocalDateTime dateTime2 = LocalDateTime.of(2022, 1, 1, 12, 0); boolean isEqual = dateTime1.isEqual(dateTime2); // true
- format():将日期时间格式化为字符串。
LocalDateTime dateTime = LocalDateTime.now();
String formattedDateTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
