java 时间如何定义

时间定义的基本概念
在Java中,时间通常通过java.time包(Java 8及以上版本引入)或旧的java.util.Date和java.util.Calendar类来定义和处理。java.time包提供了更现代、线程安全的API。

使用java.time包定义时间
java.time包含以下核心类:
LocalDate:表示日期(年、月、日),不包含时间。LocalDate date = LocalDate.of(2023, Month.OCTOBER, 5);LocalTime:表示时间(时、分、秒),不包含日期。LocalTime time = LocalTime.of(14, 30, 45);LocalDateTime:组合日期和时间。LocalDateTime dateTime = LocalDateTime.of(2023, 10, 5, 14, 30);ZonedDateTime:带时区的日期和时间。ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
使用java.util.Date和Calendar(旧版)
Date:表示特定的瞬间(毫秒精度),但大部分方法已过时。Date date = new Date(); // 当前时间Calendar:提供日期和时间的操作,但API设计复杂。Calendar calendar = Calendar.getInstance(); calendar.set(2023, Calendar.OCTOBER, 5);
时间戳的处理
Instant:表示时间戳(UTC时间,纳秒精度)。Instant instant = Instant.now();- 转换为
Date:Date legacyDate = Date.from(instant);
时区与偏移量
ZoneId:表示时区(如Asia/Shanghai)。ZoneId zone = ZoneId.systemDefault();ZoneOffset:表示固定偏移量(如+08:00)。ZoneOffset offset = ZoneOffset.ofHours(8);
格式化与解析
DateTimeFormatter:格式化时间对象为字符串或反向解析。DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formatted = LocalDateTime.now().format(formatter); LocalDateTime parsed = LocalDateTime.parse("2023-10-05 14:30", formatter);
注意事项
- 推荐使用
java.time替代旧的Date和Calendar,因其更清晰且线程安全。 - 时区处理需明确,避免隐式使用系统默认时区导致问题。
- 格式化时注意模式字母的大小写(如
MM表示月份,mm表示分钟)。






