在Java中,日期和时间的格式化是一个常见的需求,尤其是在处理用户界面或者需要将日期数据以特定形式展示的场景中。Java提供了几种方式来格式化日期和时间,这里主要介绍 java.text.SimpleDateFormat
和 Java 8 引入的 java.time.format.DateTimeFormatter
。
1. 使用 SimpleDateFormat
SimpleDateFormat
是一个非常灵活的方式来格式化和解析日期时间。这个类允许你自定义日期时间格式。
基本用法
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatExample {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = sdf.format(new Date());
System.out.println(date); // 输出当前日期和时间,例如:2024-05-14 04:48:04
}
}
格式字符串
在 SimpleDateFormat
中,日期和时间模式字符串定义了日期和时间的格式。例如:
yyyy
表示四位年份MM
表示两位月份dd
表示两位天数HH
表示两位小时(24小时制)mm
表示两位分钟ss
表示两位秒
2. 使用 DateTimeFormatter
从Java 8开始,引入了新的日期时间API(java.time
包),其中 DateTimeFormatter
是处理日期时间格式化的推荐方式,因为它是不可变的并且线程安全的。
基本用法
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class NewDateFormatExample {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = LocalDateTime.now().format(formatter); // 获取当前日期时间并格式化
System.out.println(formattedDateTime); // 输出:2024-05-14 04:48:04
}
}
格式字符串
DateTimeFormatter
使用的模式字符串和 SimpleDateFormat
非常相似,因此你可以使用相同的模式字符串来定义日期和时间的格式。
格式化和解析
除了格式化日期时间,这些类也支持解析字符串为日期对象。
使用 SimpleDateFormat
解析
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 {
Date date = sdf.parse("2024-05-14");
System.out.println(date.toString());
} catch (ParseException e) {
e.printStackTrace();
}
}
}
使用 DateTimeFormatter
解析
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class ParseLocalDateExample {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse("2024-05-14", formatter);
System.out.println(date.toString()); // 输出:2024-05-14
}
}
小结
- 使用
SimpleDateFormat
,如果我们的代码还没有迁移到Java 8或更高版本。 - 推荐使用
DateTimeFormatter
(从Java 8开始),因为它提供了更好的线程安全性和更多的API功能。 - 两者都允许自定义格式化模式,但要注意保持线程安全。