DateFormat与日期处理
文章目录
- 常见日期格式模式
- 使用 SimpleDateFormat 格式化日期
- Action 类中的日期格式化
- 解析字符串为日期
- 示例:字符串转日期
- 获取当前日期和时间
- 日期比较
- * 字符串与日期的相互转换
- 其他方法
- 总结
常见日期格式模式
java.util.Date
是 Java 中用于表示特定时间点的类,默认以毫秒为单位记录从 1970 年 1 月 1 日 00:00:00 GMT 开始的时间。
模式字符 | 描述 | 示例 |
---|---|---|
y | 年份 | yyyy 表示 4 位年份 |
M | 月份(从 1 开始) | MM 表示两位月份 |
d | 日期 | dd 表示两位日期 |
H | 小时(24 小时制) | HH 表示两位小时 |
h | 小时(12 小时制) | hh 表示两位小时 |
m | 分钟 | mm 表示两位分钟 |
s | 秒 | ss 表示两位秒数 |
S | 毫秒 | SSS 表示三位毫秒 |
E | 星期几 | EEE 表示星期 |
a | 上午/下午标志 | AM 或 PM |
使用 SimpleDateFormat 格式化日期
SimpleDateFormat
是 Java 中用于解析和格式化日期的类。它允许开发者定义自定义的日期格式,可以将 Date
对象转换为字符串或反之。
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatExample {
public static void main(String[] args) {
// 当前时间
Date currentDate = new Date();
// 定义日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 格式化日期为字符串
String formattedDate = sdf.format(currentDate);
// 输出结果
System.out.println("格式化后的日期: " + formattedDate);
}
}
输出结果:
格式化后的日期: 2025-02-19 16:45:30
Action 类中的日期格式化
public class DateFormatExample {
public static void main(String[] args) {
// 1. 创建 Date 对象(假设从数据库获取)
Date date = new Date();
// 2. 定义 DateFormat(指定格式)
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// 3. 格式化日期为字符串
String formattedDate = dateFormat.format(date);
System.out.println("格式化日期: " + formattedDate); // 输出如:2023-10-01
// 4. 解析字符串为 Date(反向操作)
try {
Date parsedDate = dateFormat.parse("2023-12-31");
System.out.println("解析日期: " + parsedDate); // 输出:Sat Dec 31 00:00:00 CST 2023
} catch (Exception e) {
e.printStackTrace();
}
}
}
解析字符串为日期
除了格式化日期为字符串,SimpleDateFormat
还可以将字符串解析为 Date
对象。
示例:字符串转日期
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ParseDateExample {
public static void main(String[] args) {
// 定义日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
// 字符串转日期
String dateStr = "2025-02-19";
Date parsedDate = sdf.parse(dateStr);
// 输出结果
System.out.println("解析后的日期: " + parsedDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
输出结果:
解析后的日期: Wed Feb 19 00:00:00 CST 2025
获取当前日期和时间
- 构造方法:
new Date()
创建一个表示当前日期和时间的Date
对象。
示例:
Date currentDate = new Date();
System.out.println(currentDate); // 输出当前日期和时间
日期比较
-
after(Date when)
判断当前日期是否在指定日期之后,返回布尔值。 -
before(Date when)
判断当前日期是否在指定日期之前,返回布尔值。 -
compareTo(Date anotherDate)
比较两个日期对象,返回整数值:- 如果当前日期晚于指定日期,返回正数。
- 如果当前日期早于指定日期,返回负数。
- 如果两个日期相等,返回 0。
示例:
Date date1 = new Date();
Date date2 = new Date(date1.getTime() + 60000); // 当前时间加 1 分钟
System.out.println(date1.after(date2)); // false
System.out.println(date1.before(date2)); // true
System.out.println(date1.compareTo(date2)); // 负数
* 字符串与日期的相互转换
通过 SimpleDateFormat
类实现字符串与日期的相互转换。
- 创建
SimpleDateFormat
对象:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- 日期转字符串(
format
方法):
Date date = new Date();
String formattedDate = sdf.format(date);
System.out.println(formattedDate); // 输出格式化后的字符串
- 字符串转日期(
parse
方法):
String dateString = "2025-02-19 16:45:30";
try {
Date parsedDate = sdf.parse(dateString);
System.out.println(parsedDate); // 输出解析后的日期
} catch (Exception e) {
e.printStackTrace();
}
其他方法
-
equals(Object obj)
判断两个日期对象是否相等。 -
clone()
创建并返回当前日期对象的副本。 -
getTimezoneOffset()
(已过时)
返回当前日期与 UTC 时间之间的时间差(以分钟为单位)。 -
getDay()
、getMonth()
、getYear()
(已过时)
获取星期几、月份和年份。这些方法已被弃用,建议使用Calendar
类替代。
示例:
Date date = new Date();
System.out.println(date.getDay()); // 星期几(0 表示周日)
System.out.println(date.getMonth()); // 月份(0 表示一月)
System.out.println(date.getYear()); // 年份(1900 年为基准)
总结
dateFormat.format(testVO.getCreateDate());
CreateDate
是Date
类型,只要字段是Date
类型就要用dateFormat.format
,不是Date
类型即便是日期也不用dateFormat.format
否则会有下面报错:
java.lang.IllegalArgumentException:
Can not find a java.io.InputStream with the name [exportExcelOut] in the invocation stack.
Check the <param name="inputName"> tag specified for this action is correct, not excluded and accepted.