java 基础语法篇 —— 日期与时间基础使用
一、Java 中日期时间的基本认识
在生活中,我们经常会用到 “年、月、日、时、分、秒”,比如:
- 今天是 2026 年 4 月 17 日
- 现在时间是 15:30:20
- 我的生日是 2004-05-20
- 这个任务从 2026-01-01 开始,到今天一共过了多少天
在 Java 中,专门提供了处理这些内容的类,最基础的有:
java.util.Date:表示一个特定的时间点java.util.Calendar:用于对日期进行加减、获取年月日等操作java.text.SimpleDateFormat:用于把日期变成我们看得懂的字符串java.time包下的基础类(JDK 8 及以上):LocalDate、LocalTime、LocalDateTime
二、传统日期类: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 位年份,如 2026MM:2 位月份,如 04dd:2 位日期,如 17HH:24 小时制小时hh:12 小时制小时mm:分钟ss:秒SSS:毫秒
常用格式:yyyy-MM-dd HH:mm:ss
3.3 SimpleDateFormat 基础使用
步骤:
- 导包:
import java.text.SimpleDateFormat; - 创建格式化对象,指定格式
- 调用
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:203.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:305.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:计算自己出生到今天一共多少天
思路:
- 把生日字符串转成 Date
- 获取当前 Date
- 得到两个时间的毫秒差
- 转成天数
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 传统方式总结
Date:表示时间SimpleDateFormat:格式化和解析format():Date → Stringparse():String → Date
Calendar:获取年月日、日期加减- 月份从 0 开始,要 +1
get()获取字段add()进行加减
7.2 新版方式总结(JDK 8+)
LocalDate:日期LocalTime:时间LocalDateTime:日期 + 时间DateTimeFormatter:格式化plusXXX()/minusXXX():日期加减ChronoUnit:计算时间差
7.3 基础阶段必须掌握的内容
- 会创建 Date 对象
- 会使用 SimpleDateFormat 格式化
- 会使用 Calendar 获取年月日
- 会使用 LocalDate 做简单日期计算
- 会用毫秒值计算两个日期相差多少天
八、结语
日期时间是 Java 基础语法中非常实用的一部分,它不像算法那样复杂,也不像多线程那样难以理解,只要记住几个类、几个方法、几种格式转换,就能熟练使用。
