421. Java 日期时间 API - 包结构 & 方法命名规范

文章目录

  • [421. Java 日期时间 API - 包结构 & 方法命名规范](#421. Java 日期时间 API - 包结构 & 方法命名规范)
    • [1. Date-Time API 的包结构 🗂️](#1. Date-Time API 的包结构 🗂️)
      • [1.1 `java.time`(核心包)](#1.1 java.time(核心包))
      • [1.2 `java.time.chrono`(替代日历系统)](#1.2 java.time.chrono(替代日历系统))
      • [1.3 `java.time.format`(格式化与解析)](#1.3 java.time.format(格式化与解析))
      • [1.4 `java.time.temporal`(时间操作扩展)](#1.4 java.time.temporal(时间操作扩展))
      • [1.5 `java.time.zone`(时区支持)](#1.5 java.time.zone(时区支持))
    • [2. 方法命名规范 📖](#2. 方法命名规范 📖)
      • [2.1 示例讲解 📝](#2.1 示例讲解 📝)
  • [总结 🎯](#总结 🎯)

421. Java 日期时间 API - 包结构 & 方法命名规范

1. Date-Time API 的包结构 🗂️

Java 的 Date-Time API 主要由一个核心包和四个子包组成:

1.1 java.time(核心包)

这是整个 API 的核心,提供最常用的类:

  • LocalDate → 只包含日期
  • LocalTime → 只包含时间
  • LocalDateTime → 日期 + 时间(不带时区)
  • ZonedDateTime → 带时区的日期和时间
  • Instant → 时间戳(精确到纳秒)
  • Duration → 表示两个时间点之间的时长
  • Clock → 提供访问当前时间和时区的方式

👉 特点:这些类都是基于 ISO-8601 日历系统,不可变(immutable)且线程安全

示例:

java 复制代码
LocalDate today = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();
Instant timestamp = Instant.now();

System.out.println("今天: " + today);
System.out.println("现在的时间: " + time);
System.out.println("当前日期时间: " + dateTime);
System.out.println("时间戳: " + timestamp);

1.2 java.time.chrono(替代日历系统)

提供 非 ISO-8601 日历,例如:

  • Hijrah(伊斯兰历)
  • JapaneseDate(日本历法)
  • ThaiBuddhistDate(泰国佛历)

你也可以自己定义日历系统(不过很少用)。

示例:

java 复制代码
HijrahDate hijrahDate = HijrahDate.now();
System.out.println("伊斯兰历日期: " + hijrahDate);

JapaneseDate japaneseDate = JapaneseDate.now();
System.out.println("日本历日期: " + japaneseDate);

1.3 java.time.format(格式化与解析)

提供日期时间的 格式化(format)解析(parse)

示例:

java 复制代码
LocalDate date = LocalDate.of(2025, 9, 15);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
System.out.println("格式化日期: " + date.format(formatter));

String input = "2025-09-15";
LocalDate parsedDate = LocalDate.parse(input, DateTimeFormatter.ISO_LOCAL_DATE);
System.out.println("解析后的日期: " + parsedDate);

1.4 java.time.temporal(时间操作扩展)

给框架和库开发者用的扩展 API:

  • TemporalField / ChronoField → 日期时间的字段(比如 YEAR、MONTH、DAY_OF_MONTH)
  • TemporalUnit / ChronoUnit → 时间单位(比如 DAYS、HOURS、MINUTES)
  • 提供 时间查询(query)调整器(adjuster) 功能

示例:

java 复制代码
LocalDate today = LocalDate.now();
int dayOfYear = today.get(ChronoField.DAY_OF_YEAR);
System.out.println("今天是一年的第几天: " + dayOfYear);

LocalDate firstDayOfNextMonth = today.with(TemporalAdjusters.firstDayOfNextMonth());
System.out.println("下个月的第一天: " + firstDayOfNextMonth);

1.5 java.time.zone(时区支持)

提供时区和时区规则的支持。常见类:

  • ZoneId
  • ZoneOffset
  • ZoneRules

👉 在大多数情况下,我们只需要用到 ZonedDateTimeZoneIdZoneOffset

示例:

java 复制代码
ZonedDateTime shanghaiTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
ZonedDateTime newYorkTime = ZonedDateTime.now(ZoneId.of("America/New_York"));

System.out.println("上海时间: " + shanghaiTime);
System.out.println("纽约时间: " + newYorkTime);

2. 方法命名规范 📖

Date-Time API 方法的命名非常一致,方便记忆和使用。下面是常见前缀和它们的作用:

前缀 方法类型 用途
of static factory 创建实例,主要用于校验输入参数,而不是转换
from static factory 从另一个对象转换成目标类型,可能会丢失信息
parse static factory 把字符串解析为日期时间对象
format instance 格式化对象为字符串
get instance 获取对象的某部分状态
is instance 判断状态(布尔查询)
with instance 返回修改后的副本(不可变对象的 set 等价物)
plus instance 返回加上时间量后的副本
minus instance 返回减去时间量后的副本
to instance 转换为另一种类型
at instance 与另一个对象组合

2.1 示例讲解 📝

of → 创建对象

java 复制代码
LocalDate date = LocalDate.of(2025, 9, 15);

from → 类型转换

java 复制代码
Instant instant = Instant.now();
ZonedDateTime zoned = ZonedDateTime.from(instant.atZone(ZoneId.systemDefault()));

parse → 字符串解析

java 复制代码
LocalDate parsed = LocalDate.parse("2025-09-15");

format → 格式化输出

java 复制代码
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
String formatted = LocalDate.now().format(formatter);

get / is → 获取或判断

java 复制代码
int day = LocalDate.now().getDayOfMonth();
boolean leap = LocalDate.now().isLeapYear();

with → 修改值(返回新对象)

java 复制代码
LocalDate changed = LocalDate.now().withMonth(12);

plus / minus → 加减操作

java 复制代码
LocalDate future = LocalDate.now().plusDays(10);
LocalDate past = LocalDate.now().minusWeeks(2);

to → 转换

java 复制代码
LocalDateTime ldt = LocalDateTime.now();
Instant inst = ldt.toInstant(ZoneOffset.UTC);

at → 组合

java 复制代码
LocalDate today = LocalDate.now();
LocalTime time = LocalTime.of(14, 30);
LocalDateTime combined = today.atTime(time);

总结 🎯

  • 包结构 :核心用 java.time,复杂需求可扩展到 chronoformattemporalzone
  • 方法规范 :命名规则统一,便于记忆;常见操作用 ofwithplusminusparseformat
  • 实际开发建议 :优先使用 java.time 包下的类,比如 LocalDateTimeZonedDateTime,同时掌握 DateTimeFormatter 来处理输入输出。
相关推荐
我命由我123456 分钟前
Android 开发 - 广播组件(标准广播、有序广播、静态注册广播、分钟到达广播、网络变更广播...)
android·java·开发语言·网络·java-ee·android studio·android-studio
周航宇JoeZhou9 分钟前
JP3-2-1-MyItem项目简介
java·ai·springboot·环境搭建·项目·管理·springai
SunnyDays101111 分钟前
Python 将 Excel(XLS/XLSX)转换为 JSON:导出工作簿、工作表、单元格区域与自定义 JSON 结构
python·json·excel·excel 转 json·导出 excel 到 json·xlsx 转 json·xls 转 json
MartinYeung511 分钟前
[论文学习]WASP:面向提示注入攻击的Web代理安全性基准测试
前端·网络·学习
lemon_sjdk15 分钟前
从 ServletRequest 到 Spring 抽象:Web 请求的底层基石与演化
java·前端·spring
程序员黑豆19 分钟前
鸿蒙应用开发之状态变化通知:@Watch 装饰器详解与实战
前端·harmonyos
swipe20 分钟前
13|(前端转全栈)支付成功不等于结束:回调、幂等、超时关单和状态竞争
前端·后端·面试
天l志20 分钟前
Chrome Extension + 本地服务:浏览器页面上下文采集与远程执行技术设计
python·谷歌浏览器
CodexDave22 分钟前
Python 自动化接单实战(九):Windows 免环境交付如何打包与诊断
windows·python·自动化·python自动化·pyinstaller·软件交付·windows打包
CTA量化套保25 分钟前
2026年量化入门路线,概念规则和简单实现逐步走
人工智能·python