当前位置: 首页 > news >正文

java 基础语法篇 —— 日期与时间基础使用

一、Java 中日期时间的基本认识

在生活中,我们经常会用到 “年、月、日、时、分、秒”,比如:

  • 今天是 2026 年 4 月 17 日
  • 现在时间是 15:30:20
  • 我的生日是 2004-05-20
  • 这个任务从 2026-01-01 开始,到今天一共过了多少天

在 Java 中,专门提供了处理这些内容的类,最基础的有:

  1. java.util.Date:表示一个特定的时间点
  2. java.util.Calendar:用于对日期进行加减、获取年月日等操作
  3. java.text.SimpleDateFormat:用于把日期变成我们看得懂的字符串
  4. java.time包下的基础类(JDK 8 及以上):LocalDateLocalTimeLocalDateTime

二、传统日期类:java.util.Date

2.1 Date 类是什么

Date类是 Java 最早期的日期类,它的作用就是表示一个时间,可以是当前系统时间,也可以是一个指定的时间。

在基础语法里,我们只需要记住:

  • 导包:import java.util.Date;
  • 创建对象:Date date = new Date();
  • 直接打印,就能看到当前时间

2.2 Date 基本使用示例

import java.util.Date; public class DateDemo { public static void main(String[] args) { // 创建Date对象,表示当前系统时间 Date now = new Date(); // 直接输出当前时间 System.out.println("当前时间:" + now); } }

运行结果类似:

Fri Apr 17 15:35:40 CST 2026

这就是系统当前时间,虽然格式不太好看,但确实代表了此时此刻的日期和时间。

2.3 Date 类常用基础方法

在基础语法阶段,只需要掌握两个最常用的方法:

1.getTime()获取从 1970 年 1 月 1 日 00:00:00 到当前时间的毫秒值。这个值是一个 long 类型数字,可以用来计算时间差。

Date now = new Date(); long time = now.getTime(); System.out.println("当前时间毫秒值:" + time);

2.setTime(long time)通过毫秒值设置一个时间。

Date date = new Date(); date.setTime(1000000000000L); System.out.println(date);

2.4 Date 类的特点

  • 表示一个瞬间时间点
  • 包含年月日、时分秒
  • 直接打印格式不美观,需要配合格式化工具
  • 用法简单,适合入门

三、日期格式化工具:SimpleDateFormat

3.1 为什么需要格式化

直接打印 Date 对象,得到的是类似:Fri Apr 17 15:35:40 CST 2026

这种格式阅读体验差,我们日常更喜欢:2026-04-17 15:35:402026/04/1704/17/2026等格式。

SimpleDateFormat就是用来把 Date 转成好看的字符串,也可以把字符串转回 Date。

3.2 格式化符号

最常用的格式符号:

  • yyyy:4 位年份,如 2026
  • MM:2 位月份,如 04
  • dd:2 位日期,如 17
  • HH:24 小时制小时
  • hh:12 小时制小时
  • mm:分钟
  • ss:秒
  • SSS:毫秒

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

3.3 SimpleDateFormat 基础使用

步骤:

  1. 导包:import java.text.SimpleDateFormat;
  2. 创建格式化对象,指定格式
  3. 调用format(Date date)方法,把日期转为字符串

示例代码:

import java.util.Date; import java.text.SimpleDateFormat; public class FormatDemo { public static void main(String[] args) { Date now = new Date(); // 创建格式化对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 格式化日期 String timeStr = sdf.format(now); System.out.println("格式化后时间:" + timeStr); } }

运行结果:

格式化后时间:2026-04-17 15:40:20

3.4 字符串转 Date

除了把日期转字符串,还可以把字符串转成 Date 对象。

示例:

import java.util.Date; import java.text.SimpleDateFormat; public class ParseDemo { public static void main(String[] args) throws Exception { String str = "2026-04-17 15:40:20"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 把字符串解析为Date Date date = sdf.parse(str); System.out.println("解析后的Date:" + date); } }

注意:parse方法会抛出异常,基础阶段直接在 main 方法上写throws Exception即可。

3.5 基础阶段总结

  • Date表示时间
  • SimpleDateFormat负责 Date 和字符串之间转换
  • format():日期 → 字符串
  • parse():字符串 → 日期

四、日历类:Calendar

4.1 Calendar 是什么

Date只能表示时间,不能方便地获取年、月、日,也不能方便地加减天数。

于是 Java 提供了Calendar类,专门用来:

  • 获取年份、月份、日期、小时、分钟
  • 对日期进行加减:加一天、减一月、加一年

4.2 Calendar 基本使用

Calendar是抽象类,不能直接new,要使用getInstance()获取对象。

import java.util.Calendar; public class CalendarDemo { public static void main(String[] args) { // 获取日历对象 Calendar cal = Calendar.getInstance(); // 获取年份 int year = cal.get(Calendar.YEAR); // 获取月份(0~11,所以要+1) int month = cal.get(Calendar.MONTH) + 1; // 获取日期 int day = cal.get(Calendar.DAY_OF_MONTH); System.out.println(year + "年" + month + "月" + day + "日"); } }

运行结果:

2026年4月17日

4.3 Calendar 常用字段(基础语法)

  • Calendar.YEAR:年
  • Calendar.MONTH:月(0~11)
  • Calendar.DAY_OF_MONTH:日
  • Calendar.HOUR_OF_DAY:24 小时制小时
  • Calendar.MINUTE:分钟
  • Calendar.SECOND:秒

4.4 日期加减操作

Calendar cal = Calendar.getInstance(); // 加3天 cal.add(Calendar.DAY_OF_MONTH, 3); // 减1个月 cal.add(Calendar.MONTH, -1); // 加2年 cal.add(Calendar.YEAR, 2);

这是基础语法中计算日期最常用的方式。

4.5 Calendar 转 Date

Calendar cal = Calendar.getInstance(); Date date = cal.getTime();

五、新版基础日期类:LocalDate、LocalTime、LocalDateTime(JDK 8+)

从 JDK 8 开始,Java 提供了一套更简单的日期时间类,属于java.time

5.1 三个核心类

  • LocalDate:只表示日期(年月日)
  • LocalTime:只表示时间(时分秒)
  • LocalDateTime:日期 + 时间

5.2 LocalDate 基础使用

import java.time.LocalDate; public class LocalDateDemo { public static void main(String[] args) { // 获取当前日期 LocalDate now = LocalDate.now(); int year = now.getYear(); int month = now.getMonthValue(); int day = now.getDayOfMonth(); System.out.println(year + "-" + month + "-" + day); } }

5.3 LocalDateTime 基础使用

import java.time.LocalDateTime; public class LocalDateTimeDemo { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); System.out.println(now); } }

输出格式:

2026-04-17 15:45:30

5.4 日期加减

LocalDate now = LocalDate.now(); // 加7天 LocalDate nextWeek = now.plusDays(7); // 减1个月 LocalDate lastMonth = now.minusMonths(1); // 加1年 LocalDate nextYear = now.plusYears(1);

不需要复杂的 Calendar,一行搞定。

5.5 新版格式化:DateTimeFormatter

import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class NewFormatDemo { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String str = now.format(formatter); System.out.println(str); } }

六、基础语法阶段常见日期练习题

题目 1:输出当前系统时间,格式为 yyyy-MM-dd HH:mm:ss

import java.util.Date; import java.text.SimpleDateFormat; public class Test1 { public static void main(String[] args) { Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String res = sdf.format(now); System.out.println(res); } }

题目 2:计算自己出生到今天一共多少天

思路:

  1. 把生日字符串转成 Date
  2. 获取当前 Date
  3. 得到两个时间的毫秒差
  4. 转成天数
import java.util.Date; import java.text.SimpleDateFormat; public class Test2 { public static void main(String[] args) throws Exception { String birthStr = "2004-05-20"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date birth = sdf.parse(birthStr); Date now = new Date(); long birthTime = birth.getTime(); long nowTime = now.getTime(); long day = (nowTime - birthTime) / 1000 / 60 / 60 / 24; System.out.println("一共活了" + day + "天"); } }

题目 3:使用 Calendar 输出 10 天后的日期

import java.util.Calendar; public class Test3 { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, 10); int y = cal.get(Calendar.YEAR); int m = cal.get(Calendar.MONTH)+1; int d = cal.get(Calendar.DAY_OF_MONTH); System.out.println(y+"-"+m+"-"+d); } }

题目 4:使用 LocalDate 计算两个日期相差多少天

import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class Test4 { public static void main(String[] args) { LocalDate d1 = LocalDate.of(2024,1,1); LocalDate d2 = LocalDate.now(); long days = ChronoUnit.DAYS.between(d1, d2); System.out.println("相差天数:" + days); } }

七、基础语法阶段日期知识总结

7.1 传统方式总结

  1. Date:表示时间
  2. SimpleDateFormat:格式化和解析
    • format():Date → String
    • parse():String → Date
  3. Calendar:获取年月日、日期加减
    • 月份从 0 开始,要 +1
    • get()获取字段
    • add()进行加减

7.2 新版方式总结(JDK 8+)

  1. LocalDate:日期
  2. LocalTime:时间
  3. LocalDateTime:日期 + 时间
  4. DateTimeFormatter:格式化
  5. plusXXX()/minusXXX():日期加减
  6. ChronoUnit:计算时间差

7.3 基础阶段必须掌握的内容

  • 会创建 Date 对象
  • 会使用 SimpleDateFormat 格式化
  • 会使用 Calendar 获取年月日
  • 会使用 LocalDate 做简单日期计算
  • 会用毫秒值计算两个日期相差多少天

八、结语

日期时间是 Java 基础语法中非常实用的一部分,它不像算法那样复杂,也不像多线程那样难以理解,只要记住几个类、几个方法、几种格式转换,就能熟练使用。

http://www.cnnetsun.cn/news/1953086.html

相关文章:

  • 如何3分钟搞定网易云音乐NCM文件转换:ncmdumpGUI完整指南
  • 破局研发管理“双面角色”:从小团队救火走向系统化治理
  • 告别真机采购!用ADB的wm命令,5分钟搞定Android应用多分辨率兼容性测试
  • 精密机械厂8-12人跨部门云工作站:从单机设计到全流程并行开发的转型
  • LVGL在STM32上的内存优化实战:如何用64KB RAM跑起精美UI(附DMA加速技巧)
  • 面试官:爆火视频点赞每秒 10w,数据库行锁直接卡死,你怎么破?
  • 新鲜出炉!Claude Code之父亲授 Opus 4.7 最佳实践
  • 紧急!AI生成代码正悄然腐蚀技术债基线:即刻启用这8项质量守卫协议,避免Q3发布事故
  • GM8775C MIPI转LVDS实战避坑指南
  • 10.机器学习——马尔科夫模型实战:从天气预测到股市分析
  • golang如何实现任务灰度发布执行_golang任务灰度发布执行实现要点
  • 别让虚拟皮肤掏空你的真实生活——写给每一位大学生的消费觉醒书
  • 漫画迷的离线宝库:一键构建你的私人漫画图书馆
  • WebForms SortedList
  • Boost电路PI参数调不好?试试这份基于频域分析的MATLAB调试指南与避坑清单
  • SQL Auto Increment:深入解析自动增长字段
  • 从工程任务调度到代码实现:拓扑排序在ALGraph中的5个关键步骤
  • 生成对抗网络(GAN)通俗解析:AI如何学会“无中生有”?
  • 自回归语言模型(CLM)与大语言模型(LLM):架构差异与应用场景解析
  • 2025最权威的十大AI科研神器推荐
  • 一文读懂VMP、Java2C:APP核心代码是如何被“藏”起来的?
  • ESXi 虚拟机厚置备转薄置备完整教程 | 官方命令一键操作,新手零踩坑
  • 避坑指南:瑞萨e2studio中DTC地址绑定的那些坑——以RA2E1内存操作为例
  • 行波管从原理到设计,0 基础入门全攻略
  • 【嵌入式电机控制#20】BLDC六步换相:从霍尔传感器到精准相位同步
  • 别再手动写JCo3.0连接代码了!用Spring Boot整合SAP RFC接口的完整配置流程
  • Fast Fourier Convolution: Revolutionizing Image Inpainting with Global Context
  • 告别官方教程的坑:Luckfox Pico驱动ST7789V2屏幕的完整避坑与性能调优指南
  • 跨越数据洪流:异步FIFO芯片IDT7204/7205在高速数据缓冲中的实战解析
  • Kubernetes 调度原理剖析