Java中格式化日期是一个常见的需求,无论是显示给用户还是记录日志,正确的日期格式都非常重要,以下是如何在Java中格式化日期的详细指南。

使用SimpleDateFormat类
Java的SimpleDateFormat类是处理日期格式化的主要工具,它允许你定义一个日期模式,然后根据这个模式来格式化或解析日期。
1 创建SimpleDateFormat对象
你需要创建一个SimpleDateFormat对象,并指定一个日期模式。
import java.text.SimpleDateFormat;
public class DateFormatExample {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
}
在上面的例子中,我们创建了一个SimpleDateFormat对象,并指定了日期模式"yyyy-MM-dd HH:mm:ss",它表示年-月-日 时:分:秒。
2 格式化日期
使用format方法可以将Date对象格式化为字符串。
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateFormatExample {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
String formattedDate = sdf.format(now);
System.out.println(formattedDate);
}
}
3 解析日期
SimpleDateFormat也可以用来解析字符串为Date对象。
import java.text.ParseException;
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateFormatExample {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = "2026-01-01 12:00:00";
try {
Date date = sdf.parse(dateString);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
使用DateTimeFormatter类(Java 8+)
从Java 8开始,引入了新的日期时间API,其中包括DateTimeFormatter类,它是SimpleDateFormat的替代品。

1 创建DateTimeFormatter对象
使用DateTimeFormatter类,你可以创建一个格式化器。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateFormatExample {
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
}
}
2 格式化日期
使用format方法将LocalDateTime对象格式化为字符串。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateFormatExample {
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
String formattedDate = now.format(dtf);
System.out.println(formattedDate);
}
}
3 解析日期
使用parse方法将字符串解析为LocalDateTime对象。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class DateFormatExample {
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateString = "2026-01-01 12:00:00";
try {
LocalDateTime date = LocalDateTime.parse(dateString, dtf);
System.out.println(date);
} catch (DateTimeParseException e) {
e.printStackTrace();
}
}
}
经验案例
假设你正在开发一个在线预订系统,你需要将用户选择的日期和时间格式化为一个特定的字符串,以便存储在数据库中。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class BookingSystem {
public static void main(String[] args) {
LocalDateTime userSelectedDateTime = LocalDateTime.of(2026, 4, 15, 10, 30);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = userSelectedDateTime.format(formatter);
System.out.println("Formatted DateTime for Database: " + formattedDateTime);
}
}
在这个案例中,我们使用了DateTimeFormatter来格式化用户选择的日期和时间,以便存储在数据库中。
FAQs
Q1: SimpleDateFormat和DateTimeFormatter哪个更好?

A1: DateTimeFormatter是Java 8引入的,它比SimpleDateFormat更安全,因为它是不可变的,并且没有线程安全问题,在新的项目中,推荐使用DateTimeFormatter。
Q2: 如何处理时区问题?
A2: 在处理日期和时间时,时区是一个重要的考虑因素,你可以使用ZonedDateTime类来处理时区。
import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class TimezoneExample {
public static void main(String[] args) {
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/New_York"));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
String formattedDateTime = zonedDateTime.format(formatter);
System.out.println("Formatted DateTime with Timezone: " + formattedDateTime);
}
}
国内详细文献权威来源
《Java并发编程实战》作者:Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea
《Java核心技术卷1:基础知识》作者:Cay S. Horstmann
《Java 8新特性详解》作者:李刚
《Java 8日期时间API教程》作者:刘伟


















