精通 Java 日期时间:SimpleDateFormat、当前日期获取与日期比较
本教程涵盖 Java 日期时间处理要点:
- 显示当前日期时间
SimpleDateFormat格式化与解析日期- 比较两个日期
Java Date 对象包含以下组成部分:

- 年(2 或 4 位)
- 月(数字、三字母缩写、全名)
- 月内日期
- 星期(如 Sun、Mon、Tue)
计算机支持更多日期相关参数,后续章节讨论。
Java 显示当前日期
Java java.util.Date 类提供简单方式获取当前系统日期时间。最小示例:
import java.util.Date; class DateExample { public static void main(String[] args) { Date current = new Date(); System.out.println(current.toString()); } }
输出:
Wed Nov 29 06:36:22 UTC 2017
输出用默认 toString() 格式。自定义布局需显式格式化。
SimpleDateFormat:解析与格式化日期
Java 用模式字符串将字母映射到特定日期组件。参考表:
| 字母 | 日期/时间组件 | 示例 |
|---|---|---|
| G | 纪元标识 | AD |
| y | 年 | 2018 |
| M | 年内月份 | July, Jul, 07 |
| w | 年内周数 | 27 |
| W | 月内周数 | 2 |
| D | 年内天数 | 189 |
| d | 月内天数 | 10 |
| F | 月内星期几 | 2 |
| E | 星期名称 | Tuesday, Tue |
| u | 周中天数(1=Mon…7=Sun) | 1 |
| a | AM/PM 标记 | PM |
| H | 一天小时(0‑23) | 0 |
| k | 一天小时(1‑24) | 24 |
| K | 上午/下午小时(0‑11) | 0 |
| h | 上午/下午小时(1‑12) | 12 |
| m | 小时内分钟 | 30 |
| s | 分钟内秒 | 55 |
| S | 毫秒 | 978 |
| z | 时区 | Pacific Standard Time; PST; GMT-08:00 |
| Z | 时区偏移 | -0800 |
| X | 时区 | -08, -0800, -08:00 |
构建特定格式字符串时随时查阅此表。
使用 SimpleDateFormat
SimpleDateFormat 类让你定义模式格式化或解析日期。例如:
- 期望格式:2012.10.23 20:20:45 PST → 模式
yyyy.MM.dd HH:mm:ss zzz - 期望格式:09:30:00 AM 23-May-2012 → 模式
hh:mm:ss a dd-MMM-yyyy
提示: 大小写至关重要——M 代表月、m 代表分钟,切勿混淆。
import java.text.SimpleDateFormat; import java.util.Date; class TestDatesFormat { public static void main(String[] args) { Date now = new Date(); System.out.println(now); String pattern = "hh:mm:ss a dd-MMM-yyyy"; SimpleDateFormat sdf = new SimpleDateFormat(pattern); System.out.println(sdf.format(now)); } }
输出:
Wed Nov 29 06:31:41 UTC 2017 06:31:41 AM 29-Nov-2017
比较日期

Java 中最可靠的日期比较方法是 compareTo(),返回负值表示第一个日期更早,零表示相等,正值表示更晚。
import java.text.SimpleDateFormat; import java.text.ParseException; import java.util.Date; class TestDatesCompare { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); Date date1 = sdf.parse("20-08-1981"); Date date2 = sdf.parse("12-10-2012"); System.out.println("Date1 : " + sdf.format(date1)); System.out.println("Date2 : " + sdf.format(date2)); if (date1.compareTo(date2) > 0) { System.out.println("Date 1 occurs after Date 2"); } else if (date1.compareTo(date2) < 0) { System.out.println("Date 1 occurs before Date 2"); } else { System.out.println("Both dates are the same"); } } }
输出:
Date1 : 20-08-1981 Date2 : 12-10-2012 Date 1 occurs before Date 2
java
- 计算电抗直流电路中的电压与电流
- C++日期时间完全指南:ctime库、tm结构体与格式化输出
- Python 获取当前日期和时间:实用指南
- Python 轻松获取当前时间与时区数据
- Python 日期时间处理实战:time 与 calendar 模块完全指南
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java 增强 for 循环:语法、示例与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 掌握 Java 日期时间:构造器、方法与最佳实践
- Java 10 引入基于时间的发布版本控制:可预测的半年更新节奏
- Java 8 全新日期时间 API:线程安全、设计优雅、时区处理轻松搞定