LocalDate与LocalTime与LocalDateTime的区别与联系

LocalDate与LocalTime与LocalDateTime的区别与联系
Nuyoah今天在转化时间的时候出错了,系统首页需要以年,月,日三种分类进行日期统计,因为我平常一直使用LocalDateTime,没有使用过LocalTime和LocalDate,所以在今天我修改日期的时候使用DateTimeFormater格式化字符串将"2024-11-12"转换成LocalDateTime 的时候报错了
代码大致是:
1 |
|
错误信息
1 | java.time.format.DateTimeParseException: Text '2024-11-12' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved to 2024-11-12 of type java.time.format.Parsed |
至此我才发现LocalDateTime需要精度信息,无法通过"yyyy-MM-dd"来格式化字符串到LocalDateTime
总结:
区别
他们三个表示的时间精度不同:
LocalDate
:仅表示日期,不包含具体的时间信息。它可以精确到年、月、日,比如 2024 年 10 月 15 日可以用LocalDate
来表示。LocalTime
:仅表示时间,不包含日期信息。能精确到时、分、秒以及纳秒,例如 14:30:00 就可以使用LocalTime
表示。LocalDateTime
:同时包含日期和时间信息,它是LocalDate
和LocalTime
的组合,能精确到年、月、日、时、分、秒和纳秒,像 2024 - 10 - 15T14:30:00 这样的日期和时间组合就适合用LocalDateTime
表示。
使用场景不同:
-
LocalDate
:适用于只关注日期的场景,如生日、假期安排、账单到期日等。构造时可以使用静态方法of
传入年、月、日,也可以通过now()
获取当前日期。1
2
3
4
5
6
7
8
9
10
11
12import java.time.LocalDate;
public class LocalDateExample {
public static void main(String[] args) {
// 获取当前日期
LocalDate today = LocalDate.now();
System.out.println("Today: " + today);
// 指定日期
LocalDate specificDate = LocalDate.of(2024, 10, 15);
System.out.println("Specific date: " + specificDate);
}
} -
LocalTime
:常用于只关心时间点的场景,如会议开始时间、商店营业时间等。可以使用of
方法传入时、分、秒等参数来构造,也可以用now()
获取当前时间。1
2
3
4
5
6
7
8
9
10
11
12import java.time.LocalTime;
public class LocalTimeExample {
public static void main(String[] args) {
// 获取当前时间
LocalTime now = LocalTime.now();
System.out.println("Now: " + now);
// 指定时间
LocalTime specificTime = LocalTime.of(14, 30);
System.out.println("Specific time: " + specificTime);
}
} -
LocalDateTime
:适用于需要同时记录日期和时间的场景,如事件发生的具体时刻、系统日志记录的时间戳等。构造时同样可以使用of
方法结合日期和时间信息,或者用now()
获取当前的日期和时间。1
2
3
4
5
6
7
8
9
10
11
12import java.time.LocalDateTime;
public class LocalDateTimeExample {
public static void main(String[] args) {
// 获取当前日期和时间
LocalDateTime currentDateTime = LocalDateTime.now();
System.out.println("Current date and time: " + currentDateTime);
// 指定日期和时间
LocalDateTime specificDateTime = LocalDateTime.of(2024, 10, 15, 14, 30);
System.out.println("Specific date and time: " + specificDateTime);
}
}
联系
继承关系:它们都实现了 Temporal
接口,并且继承自 TemporalAccessor
接口。这意味着它们都具备一些通用的时间访问和操作方法,例如可以通过这些接口方法来查询日期或时间的各个字段(如年、月、日、时等)。
相互转换:
-
LocalDate
与LocalDateTime
:LocalDate
可以通过atTime
方法结合LocalTime
转换为LocalDateTime
;LocalDateTime
可以通过toLocalDate
方法提取出LocalDate
。1
2
3
4
5
6
7
8
9
10
11public static void main(String[] args) {
LocalDate localDate = LocalDate.of(2024, 10, 15);
LocalTime localTime = LocalTime.of(14, 30);
// LocalDate 转 LocalDateTime
LocalDateTime localDateTime = localDate.atTime(localTime);
System.out.println("Converted to LocalDateTime: " + localDateTime);
// LocalDateTime 转 LocalDate
LocalDate extractedDate = localDateTime.toLocalDate();
System.out.println("Extracted LocalDate: " + extractedDate);
} -
LocalTime
与LocalDateTime
:LocalTime
可以通过atDate
方法结合LocalDate
转换为LocalDateTime
;LocalDateTime
可以通过toLocalTime
方法提取出LocalTime
。
操作方法联系:
1 | public static void main(String[] args) { |