java中有哪些时间类型呢?
下文笔者讲述java中常见的时间类型,如下所示
java8之前的时间类
Java 8之前 时间类(位于`java.util`包) 这些类已过时 但仍可能在遗留系统中使用
类名 | 描述 |
`Date` | 表示特定的瞬间, 精确到毫秒。 已不推荐用于新代码 |
`Calendar` | 抽象类, 用于日期和时间字段的操作, 如加减、格式化等 |
`SimpleDateFormat` | 用于格式化和 解析日期字符串(非线程安全) |
Java8之后引入的新时间API(`java.time`包)
从Java8开始 引入新时间API(JSR-310) 具有不可变性、线程安全、清晰的设计等优点常用类如下
类名 | 描述 |
`LocalDate` | 只表示日期(年月日), 不包含时间和时区。 例如:2025-04-05 |
`LocalTime` | 只表示时间(时分秒纳秒), 不包含日期和时区。 例如:14:30:45 |
`LocalDateTime` | 表示日期和时间, 不包含时区。 例如:2025-04-05T14:30:45 |
`ZonedDateTime` | 表示带时区的日期和时间。 适用于跨时区处理 |
`Instant` | 表示时间戳(Unix 时间), 通常用于记录事件发生的时间点 |
`Duration` | 表示两个时间点之间的持续时间(基于 `Instant`或`LocalTime`等) |
`Period` | 表示两个日期之间的“天数/月数/年数”差异(基于`LocalDate`) |
`ZoneId` | 时区标识符,用于表示不同地区的时区(如 `ZoneId.of("Asia/Shanghai")`) |
`DateTimeFormatter` | 线程安全的日期时间格式化工具, 替代 `SimpleDateFormat` |
时间常用操作示例
// 获取当前日期 LocalDate today = LocalDate.now(); // 获取当前时间 LocalTime now = LocalTime.now(); // 获取当前日期时间 LocalDateTime current = LocalDateTime.now(); // 格式化日期时间 String formatted = current.format(DateTimeFormatter.ISO_DATE_TIME); // 解析日期时间 LocalDateTime parsed = LocalDateTime.parse("2025-04-05T10:00:00"); // 加一天 LocalDate tomorrow = today.plusDays(1); // 计算两个日期之间的天数 long daysBetween = ChronoUnit.DAYS.between(today, tomorrow);
各时间方法的对比
类型 | 是否带有时区 | 是否包含日期 | 是否包含时间 | 推荐使用场景 |
`LocalDate` | 否 | ✅ | ❌ | 仅需日期时(如生日) |
`LocalTime` | 否 | ❌ | ✅ | 仅需时间时(如打卡时间) |
`LocalDateTime` | 否 | ✅ | ✅ | 不涉及时区的本地时间 |
`ZonedDateTime` | ✅ | ✅ | ✅ | 跨时区业务逻辑 |
`Instant` | ✅(UTC) | ❌ | ✅ | 日志、时间戳、系统内部使用 |
`Date / Calendar` | - | - | - | 遗留系统兼容,不推荐新项目使用 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。