JavaSE时间类:从Date到Java 8新API的演进(java时间规则)

在Java开发中,处理日期和时间是常见需求。Java的时间API经历了多次演进,从早期的Date和Calendar,到Java 8引入的全新时间API(JSR 310),逐步解决了旧API设计上的缺陷。本文将全面解析Java时间类的发展历程、核心API及最佳实践。

一、Java时间API的发展历程

第一代:java.util.Date(JDK 1.0)

设计缺陷:同时包含日期和时间,且不支持时区。

已过时:大部分方法已被标记为@Deprecated。

第二代:java.util.Calendar(JDK 1.1)

改进:支持时区和国际化,但API繁琐且非线程安全。

问题:月份从0开始(0=1月),日期计算复杂。

第三代:Java 8新API(JSR 310)

核心包:java.time(如LocalDateTime、Instant、DateTimeFormatter)。

设计原则:不可变、线程安全、清晰易用。

二、Java 8之前的时间API(旧版)

1. java.util.Date

import java.util.Date;

// 创建当前时间

Date now = new Date();

System.out.println(now); // 输出:Mon May 26 10:30:00 CST 2025

// 时间比较

Date past = new Date(125, 4, 26); // 注意:年份从1900开始,月份从0开始

boolean isAfter = now.after(past); // true

AI生成项目

java

运行

import java.util.Calendar;

// 创建Calendar实例

Calendar calendar = Calendar.getInstance(); // 默认时区和语言环境

// 设置时间

calendar.set(2025, Calendar.MAY, 26, 10, 30, 0); // 月份从0开始

// 获取时间字段

int year = calendar.get(Calendar.YEAR); // 2025

int month = calendar.get(Calendar.MONTH) + 1; // 5(注意:需+1)

int day = calendar.get(Calendar.DAY_OF_MONTH); // 26

// 时间计算

calendar.add(Calendar.DAY_OF_MONTH, 7); // 加7天

今日霍州(www.jrhz.info)©️

2. java.util.Calendar

import java.util.Calendar;

// 创建Calendar实例

Calendar calendar = Calendar.getInstance(); // 默认时区和语言环境

// 设置时间

calendar.set(2025, Calendar.MAY, 26, 10, 30, 0); // 月份从0开始

// 获取时间字段

int year =6983y.tokyo calendar.get(Calendar.YEAR); // 2025

int month = calendar.get(Calendar.MONTH) + 1; // 5(注意:需+1)

int day = calendar.get(Calendar.DAY_OF_MONTH); // 26

// 时间计算

calendar.add(Calendar.DAY_OF_MONTH, 7); // 加7天

AI生成项目

java

运行

import java.util.Date;

// 创建当前时间

Date now = new Date();

System.out.println(now); // 输出:Mon May 26 10:30:00 CST 2025

// 时间比较

Date past = new Date(125, 4, 26); // 注意:年份从1900开始,月份从0开始

boolean isAfter = now.after(past); // true

3. java.text.SimpleDateFormat

import java.text.SimpleDateFormat;

import java.util.Date;

// 日期格式化

Date now = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String formattedDate = sdf.format(now); // 2025-05-26 10:30:00

// 字符串解析为日期

Date parsedDate = sdf.parse("2025-05-26 10:30:00");

AI生成项目

今日霍州(www.jrhz.info)©️

java

运行

import java.time.Duration;

import java.time.LocalTime;

import java.time.Period;

import java.time.LocalDate;

// Duration示例(时间间隔)

LocalTime start = LocalTime.of(10, 0);

LocalTime end = LocalTime.of(12, 30);

Duration duration = Duration.between(start, end);

System.out.println(duration.toHours(658yr.tokyo)); // 2小时

System.out.println(duration.toMinutes()); // 150分钟

// Period示例(日期间隔)

LocalDate startDate = LocalDate.of(2025, 1, 1);

LocalDate endDate = LocalDate.of(2025, 5, 26);

Period period = Period.between(startDate, endDate);

System.out.println(period.getMonths() + "个月" + period.getDays() + "天"); // 4个月25天

4. 旧API的主要问题

线程安全:SimpleDateFormat非线程安全,多线程环境需额外同步。

设计缺陷:Date同时包含日期和时间,Calendar月份从0开始。

时区处理复杂:时区转换需手动计算偏移量。

三、Java 8新时间API(推荐)

1. 核心类概述

类名描述

LocalDate不可变的日期(年、月、日),如2025-05-26。

LocalTime不可变的时间(时、分、秒、纳秒),如10:30:00.123。

LocalDateTime不可变的日期和时间,如2025-05-26T10:30:00。

ZonedDateTime带时区的日期时间,如2025-05-26T10:30:00+08:00[Asia/Shanghai]。

Instant时间线上的一个点(UTC时间),用于系统时间戳。

Duration表示两个时间点之间的间隔(如2小时30分)。

Period表示两个日期之间的间隔(如3年2个月1天)。

DateTimeFormatter线程安全的日期时间格式化与解析工具。

2. LocalDate、LocalTime与LocalDateTime

特别声明:[JavaSE时间类:从Date到Java 8新API的演进(java时间规则)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

75年前,一位女孩从帝国大厦86楼跳下,成就一张经典艺术照(1975年一位叫什么的队员为了保证向全世界)

父母离异对她造成了极大的心理冲击,她跟随母亲生活,从一个活泼开朗的小女孩逐渐变得沉默寡言,整日将自己关在房间里发呆,不愿与人交流。她内心暗暗告诉自己要拒绝这段婚姻,但又不愿放弃这个为她带来光亮的人。 她…

75年前,一位女孩从帝国大厦86楼跳下,成就一张经典艺术照(1975年一位叫什么的队员为了保证向全世界)

45岁童蕾现状:定居浙江农村,因丈夫背上债务,复出后变拍戏劳模(童蕾最近生活照)

在其他剧集里,她不断尝试不同的人物类型,甚至在一部抗战题材剧中,成功地将自己塑造为一位坚毅的女性♀️角色,这些作品逐步为她在业内积累了良好的口碑。结婚初期,周旭辉的公司运转良好,童蕾因此调整了自己的生活重心,偶尔…

45岁童蕾现状:定居浙江农村,因丈夫背上债务,复出后变拍戏劳模(童蕾最近生活照)

日本大尺度影片,《温柔的美兽》:修道院暗影下的反抗,杀手的自我救赎与逃亡(日本大尺度影片燕尾蝶)

斋藤信幸用克制到极致的镜头语言,不评判、不煽情,却让每一份挣扎都直抵人心,让每一次觉醒都拥有撼动灵魂的力量:人性从不是非黑即白的抉择,而是温柔与野性的共生,是在桎梏中坚守本心的勇气。它在紫苑手中,是信仰的“信…

日本大尺度影片,《<strong>温柔的美兽</strong>》:修道院暗影下的反抗,杀手的自我救赎与逃亡(日本大尺度影片燕尾蝶)

不交智商税!素说美丽重组胶原眼膜,把性价比打在公屏上(没交智商税)

我每周敷3次,夜间敷15分钟,敷完眼周水润紧实,不是取下就打回原形的假润;熬夜后急救敷10分钟,浮肿暗沉快速缓解,1.2色阶的提亮效果肉眼可见;坚持28天,眼尾干纹变浅、泪沟阴影缩小,肌底胶原密度明显提升,这…

不交智商税!素说美丽重组胶原眼膜,把性价比打在公屏上(没交智商税)

佳能NPG-8484L粉盒G84是否适合你的打印机🖨️?2026年选购指南(佳能84粉盒)

选购佳能NPG-8484L粉盒G84,首先要确认打印机🖨️型号兼容性。本文全面分析这款耗材的产品特点、适用场景和性价比,助您2026年轻松挑选。适合佳能IR 2625、2630、2635、2645等机型。明确墨粉类型,了解如何选择更优质的耗材

佳能NPG-8484L粉盒G84是否适合你的打印机🖨️?2026年选购指南(佳能84粉盒)