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

Java 时间类(上):JDK7 及以前时间类 Date、SimpleDateFormat、Calendar 最全总结
在这里插入图片描述
🏠个人主页:黎雁
🎬作者简介:C/C++/JAVA后端开发学习者
❄️个人专栏:C语言数据结构(C语言)EasyXJAVA游戏规划程序人生
✨ 从来绝巘须孤往,万里同尘即玉京
在这里插入图片描述


文章目录

在这里插入图片描述

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

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

📝 文章摘要

  • 阅读时长: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 \mu 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. 代码示例

importjava.util.Date;publicclassDateDemo01{publicstaticvoidmain(String[] args){// 1. 获取当前时间Date d1 =newDate();System.out.println(d1);// 2. 指定时间:1970-01-01 00:00:00Date d2 =newDate(0L);System.out.println(d2);// 东八区会显示 08:00:00// 3. 修改时间 d2.setTime(1000L);// 加 1 秒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. 代码示例

importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassSimpleDateFormatDemo01{publicstaticvoidmain(String[] args)throwsParseException{Date d =newDate(0L);// 1. 默认格式SimpleDateFormat sdf1 =newSimpleDateFormat();System.out.println(sdf1.format(d));// 2. 自定义格式SimpleDateFormat sdf2 =newSimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");System.out.println(sdf2.format(d));// 3. 字符串解析成 DateString str ="2023-11-11 11:11:11";SimpleDateFormat sdf =newSimpleDateFormat("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. 代码示例

importjava.util.Calendar;importjava.util.Date;publicclassCalendarDemo01{publicstaticvoidmain(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));}// 星期转换publicstaticStringgetWeek(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 等,更加简洁、安全、强大!

如果你觉得本文对你有帮助,欢迎 点赞 👍、收藏 💾、评论 💬,后续持续更新 Java 基础精讲系列~

Read more

[DeepSeek] 入门详细指南(上)

[DeepSeek] 入门详细指南(上)

前言 今天的是 zty 写DeepSeek的第1篇文章,这个系列我也不知道能更多久,大约是一周一更吧,然后跟C++的知识详解换着更。 来冲个100赞兄弟们 最近啊,浙江出现了一匹AI界的黑马——DeepSeek。这个名字可能对很多人来说还比较陌生,但它已经在全球范围内引发了巨大的关注,甚至让一些科技巨头感到了压力。简单来说这 DeepSeek足以改变世界格局                                                   先   赞   后   看    养   成   习   惯  众所周知,一篇文章需要一个头图                                                   先   赞   后   看    养   成   习   惯   上面那行字怎么读呢,让大家来跟我一起读一遍吧,先~赞~后~看~养~成~习~惯~ 想要 DeepSeek从入门到精通.pdf 文件的加这个企鹅群:953793685(

By Ne0inhk
DeepFace深度学习库+OpenCV实现——情绪分析器

DeepFace深度学习库+OpenCV实现——情绪分析器

目录 应用场景 实现组件 1. 硬件组件 2. 软件库与依赖 3. 功能模块 代码详解(实现思路) 导入必要的库 打开摄像头并初始化变量 主循环 FPS计算 情绪分析及结果展示 显示FPS和图像 退出条件 编辑 完整代码 效果展示 自然的 开心的 伤心的 恐惧的 惊讶的  效果展示 自然的 开心的 伤心的 恐惧的 惊讶的   应用场景         应用场景比较广泛,尤其是在需要了解和分析人类情感反应的场合。: 1. 心理健康评估:在心理健康领域,可以通过长期监控和分析一个人的情绪变化来辅助医生进行诊断或治疗效果评估。 2. 用户体验研究:在产品设计、广告制作或网站开发过程中,通过观察用户在使用过程中的情绪反应,来优化产品的用户体验。 3. 互动娱乐:在游戏或虚拟现实应用中,根据玩家的情绪状态动态调整游戏难度或故事情节,以增加沉浸感和互动性。

By Ne0inhk
最全java面试题及答案(208道)

最全java面试题及答案(208道)

本文分为十九个模块,分别是:「Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 ,如下图所示: 共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 Java 基础 1. JDK 和 JRE 有什么区别? * JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java

By Ne0inhk
用 DeepSeek 打造你的超强代码助手

用 DeepSeek 打造你的超强代码助手

DeepSeek Engineer 是啥? 简单来说,DeepSeek Engineer 是一个基于命令行的智能助手。它能帮你完成这些事: * 快速读文件内容:比如你有个配置文件,直接用命令把它加载进助手,后续所有操作都可以基于这个文件。 * 自动改文件:它不仅能提建议,还可以直接生成差异表(diff),甚至自动应用修改。 * 智能代码生成:比如你让它生成代码片段,它会按照指定格式和规则直接返回。 更重要的是,这一切都是通过 DeepSeek 的强大 API 来实现的。想象一下,你有个贴身助手,不仅能听懂你的代码需求,还能直接动手帮你写! 核心功能拆解 我们先来看 DeepSeek Engineer 的几个核心能力,让你更好地理解它的强大之处。 1. 自动配置 DeepSeek 客户端 启动这个工具时,你只需要准备一个 .env 文件,里面写上你的 API Key,比如: DEEPSEEK_API_

By Ne0inhk