跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java 时间类(上):JDK7 及以前 Date、SimpleDateFormat、Calendar 详解

Java 时间处理涉及 GMT、UTC 标准及毫秒值底层存储。梳理 JDK7 前核心类:Date 用于表示瞬间,SimpleDateFormat 负责格式化与解析,Calendar 提供日历字段操作。重点涵盖构造方法、常用 API 及月份从 0 开始等易错点,为后续学习 JDK8 新时间 API 奠定基础。

DotNetGuy发布于 2026/3/25更新于 2026/8/2237 浏览
Java 时间类(上):JDK7 及以前 Date、SimpleDateFormat、Calendar 详解

在这里插入图片描述

适合 Java 初学者、准备面试或需要系统梳理时间 API 的同学,内容较详细,建议收藏反复看。

Java 时间类(上):JDK7 及以前时间类 Date、SimpleDateFormat、Calendar 最全总结 🕒

📝 文章摘要

  • 阅读时长:10 分钟
  • 适合人群:
    1. Java 零基础小白 → 重点看:概念、构造方法、代码示例
    2. 正在学习 Java 常用类的同学 → 重点看:格式转换、日历字段、易错点
    3. 面试复习 → 重点看:月份从 0 开始、星期规则、时间毫秒值
  • 本文内容:系统讲解 JDK7 及以前传统时间 API,包括时间单位、Date、SimpleDateFormat、Calendar 四大核心知识点,附带完整代码 + 细节说明。

一、时间相关基础知识点 ⏱

在学习 Java 时间类之前,我们先搞懂时间标准和单位换算,这是所有时间类的底层基础。

1. 时间标准
  • GMT(Greenwich Mean Time):格林尼治时间,老式标准时间
  • UTC(Coordinated Universal Time):世界协调时间,目前使用原子钟计时,是现代标准
2. 时间单位与换算

单位从小到大:秒 (s) → 毫秒 (ms) → 微秒 (μs) → 纳秒 (ns) → 皮秒 (ps) → 飞秒 (fs)

相邻单位进率:1000

公式:

1s = 10^3 ms = 10^6 μs = 10^9 ns = 10^12 ps = 10^15 fs

Java 中所有时间类,底层存储都是毫秒值: 从 1970 年 1 月 1 日 00:00:00(UTC)到当前时间的总毫秒数。


二、Date 时间类 📅

1. 概述
  • java.util.Date,必须导包
  • 表示一个瞬间,精确到毫秒
  • 可以看做是 Java 写好的时间 JavaBean
2. 构造方法
方法名说明
public Date()创建对象,表示当前系统时间
public Date(long date)创建对象,表示指定毫秒值对应的时间
3. 成员方法
方法名说明
public void setTime(long time)设置/修改时间毫秒值
public long getTime()获取时间对象对应的毫秒值
4. 代码示例
import java.util.Date;

public class DateDemo01 {
    public static void main(String[] args) {
        // 1. 获取当前时间
        Date d1 = new Date();
        System.out.println(d1);

        // 2. 指定时间:1970-01-01 00:00:00
        Date d2 = new Date(0L);
        System.out.println(d2);
        // 东八区会显示 08:00:00

        // 3. 修改时间 d2.setTime(1000L); // 加 1 秒
        d2.setTime(1000L);
        System.out.println(d2);

        // 4. 获取毫秒值
        long time = d2.getTime();
        System.out.println(time); // 1000
    }
}

✨ 小细节: 中国属于东八区,比标准时间快 8 小时,所以 0 毫秒值会显示 08:00:00。


三、SimpleDateFormat 格式化与解析 ✍️

1. 作用
  • 格式化:Date 对象 → 好看的字符串(如 2026-02-10 12:00:00)
  • 解析:字符串时间 → Date 对象
2. 包路径

java.text.SimpleDateFormat

3. 构造方法
方法名说明
public SimpleDateFormat()默认格式
public SimpleDateFormat(String pattern)指定格式(最常用)
4. 核心方法
方法名说明
String format(Date date)格式化:日期 → 字符串
Date parse(String source)解析:字符串 → 日期
5. 日期模式字母
字母含义
y年
M月
d日
H时(24 小时制)
m分
s秒
S毫秒

常用格式: yyyy-MM-dd HH:mm:ss yyyy 年 MM 月 dd 日 HH:mm:ss

6. 代码示例
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo01 {
    public static void main(String[] args) throws ParseException {
        Date d = new Date(0L);

        // 1. 默认格式
        SimpleDateFormat sdf1 = new SimpleDateFormat();
        System.out.println(sdf1.format(d));

        // 2. 自定义格式
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH:mm:ss");
        System.out.println(sdf2.format(d));

        // 3. 字符串解析成 Date
        String str = "2023-11-11 11:11:11";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(str);
        System.out.println(date.getTime());
    }
}

⚠️ 注意: parse 方法会抛出 ParseException,必须处理(throws / try-catch)。


四、Calendar 日历类 📆

1. 概述
  • java.util.Calendar
  • 抽象类,不能直接 new,通过 getInstance() 获取对象
  • 可以单独获取/修改:年、月、日、时、分、秒、星期
2. 获取对象
Calendar c = Calendar.getInstance();

底层会根据系统时区、语言返回不同的子类对象。

3. 常用方法
方法名说明
int get(int field)获取某个字段
void set(int field, int value)修改某个字段
void add(int field, int amount)增加/减少时间
Date getTime()转成 Date 对象
long getTimeInMillis()获取时间毫秒值
4. 日历常用字段(背)
  • Calendar.YEAR:年
  • Calendar.MONTH:月(0~11,不是 1~12)
  • Calendar.DAY_OF_MONTH:日
  • Calendar.DAY_OF_WEEK:星期(周日为 1,周一 2…周六 7)
5. 代码示例
import java.util.Calendar;
import java.util.Date;

public class CalendarDemo01 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();

        // 设置年月日 c.set(2026,8,10); // 月份减 1
        c.add(Calendar.MONTH, -1);

        // 获取
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1; // +1 才是真实月份
        int day = c.get(Calendar.DAY_OF_MONTH);
        int weekIndex = c.get(Calendar.DAY_OF_WEEK);

        System.out.println(year + "年" + month + "月" + day + "日 " + getWeek(weekIndex));
    }

    // 星期转换
    public static String getWeek(int index) {
        String[] arr = {"", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        return arr[index];
    }
}

⚠️ 超级大坑: 月份:0 代表 1 月,11 代表 12 月 星期:1 是周日,2 是周一,7 是周六 实际开发一定要做转换!


📌 本篇知识回顾

  1. Java 时间底层都是毫秒值,从 1970-1-1 开始算
  2. Date:表示时间,获取/设置毫秒值
  3. SimpleDateFormat:格式化 & 解析,掌握 yyyy-MM-dd HH:mm:ss
  4. Calendar:抽象类,通过 getInstance() 获取
    • 月份 0~11
    • 星期 1=周日

✍️ 写在最后

本篇我们系统学完了 JDK7 及以前的传统时间类,它们虽然好用,但存在线程不安全、设计不优雅等问题,所以 JDK8 推出了全新的时间 API。

下一篇我们将学习: JDK8 全新时间类:LocalDate、LocalTime、LocalDateTime、Instant、DateTimeFormatter 等,更加简洁、安全、强大!

目录

  1. Java 时间类(上):JDK7 及以前时间类 Date、SimpleDateFormat、Calendar 最全总结 🕒
  2. 📝 文章摘要
  3. 一、时间相关基础知识点 ⏱
  4. 1. 时间标准
  5. 2. 时间单位与换算
  6. 二、Date 时间类 📅
  7. 1. 概述
  8. 2. 构造方法
  9. 3. 成员方法
  10. 4. 代码示例
  11. 三、SimpleDateFormat 格式化与解析 ✍️
  12. 1. 作用
  13. 2. 包路径
  14. 3. 构造方法
  15. 4. 核心方法
  16. 5. 日期模式字母
  17. 6. 代码示例
  18. 四、Calendar 日历类 📆
  19. 1. 概述
  20. 2. 获取对象
  21. 3. 常用方法
  22. 4. 日历常用字段(背)
  23. 5. 代码示例
  24. 📌 本篇知识回顾
  25. ✍️ 写在最后
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ 无锁队列(Lock-Free Queue)详解
  • Claude Code 命令行工具安装与实战指南
  • C++ 驱动 spidev0.0 读取返回 0xFF 的硬件电平分析与排查
  • Anaconda 与 Python 环境安装配置指南
  • C 语言初阶数据结构习题解析(一)
  • ZeroClaw:纯 Rust 打造的极致轻量级 AI 基础设施,重新定义极简边界
  • Neo4j 图数据库安装与核心命令详解
  • AI 编程助手深度对比:OpenCode vs Claude Code vs Kimi Code CLI
  • 开源模型 Prompt 实验报告:Mistral 与 Qwen 对比分析
  • 使用Cython提升Python运行性能详解
  • Python GUI 开发指南:CustomTkinter 完整教程
  • Orbbec SDK Python 深度摄像头开发指南
  • VS Code 配置 C/C++ 编程运行环境教程
  • 转行 Python 两年:从运营到爬虫工程师的个人成长之路
  • 利用 AI 与轻量化工具优化开发团队协同流程
  • Git 版本控制从入门到精通
  • 相干伊辛机在医疗及医疗 AI 领域的应用前景
  • 大规模语言模型从理论到实践:MOSS 与 RLHF 实践
  • 抖音小说推文项目操作流程:利用解压视频实现变现
  • Xinference 同平台并发推理实录:Llama3-70B+Qwen2-VL+Whisper-large-v3

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online