在Java中,将java.util.Date对象转换为String字符串有多种方法,以下是几种常见的实现方式,包括不同版本的Java(Java 8之前和之后)的推荐做法。

使用 SimpleDateFormat(Java 8 之前)
SimpleDateFormat 是最传统的方式,可以自定义日期格式。
示例代码
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateToString {
public static void main(String[] args) {
Date date = new Date(); // 获取当前时间
// 定义日期格式(yyyy-MM-dd HH:mm:ss)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 将Date转换为String
String dateString = sdf.format(date);
System.out.println("Formatted Date: " + dateString);
// 其他格式示例
SimpleDateFormat sdf2 = new SimpleDateFormat("MM/dd/yyyy");
String dateString2 = sdf2.format(date);
System.out.println("Formatted Date (US): " + dateString2);
}
}
常用格式字符
| 符号 | 含义 | 示例(2025-10-05 14:30:00) |
|---|---|---|
yyyy |
4位年份 | 2025 |
MM |
2位月份(01-12) | 10 |
dd |
2位日期(01-31) | 05 |
HH |
24小时制(00-23) | 14 |
mm |
分钟(00-59) | 30 |
ss |
秒(00-59) | 00 |
a |
上午/下午标记 | PM |
使用 DateTimeFormatter(Java 8+ 推荐)
Java 8 引入了 java.time 包,推荐使用 LocalDateTime + DateTimeFormatter 来处理日期时间。
示例代码
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateToStringJava8 {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now(); // 获取当前时间
// 定义日期格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 将LocalDateTime转换为String
String formattedDate = now.format(formatter);
System.out.println("Formatted Date: " + formattedDate);
// 其他格式示例
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm a");
String formattedDate2 = now.format(formatter2);
System.out.println("Formatted Date (US): " + formattedDate2);
}
}
java.time 常用类
| 类 | 说明 |
|---|---|
LocalDate |
仅日期(年月日) |
LocalTime |
仅时间(时分秒) |
LocalDateTime |
日期+时间 |
ZonedDateTime |
带时区的日期时间 |
从 java.util.Date 转换为 java.time(Java 8+)
如果已有 java.util.Date 对象,可以先转换为 java.time 类型,再格式化。
示例代码
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class DateToStringConvert {
public static void main(String[] args) {
Date oldDate = new Date(); // 旧的Date对象
// 1. 转换为Instant
Instant instant = oldDate.toInstant();
// 2. 转换为LocalDateTime(指定时区)
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
// 3. 格式化输出
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDate = localDateTime.format(formatter);
System.out.println("Converted Date: " + formattedDate);
}
}
使用 toString() 方法(默认格式)
直接调用 Date 的 toString() 方法,输出默认格式(英文):

Date date = new Date(); System.out.println(date.toString()); // 输出类似: Wed Oct 05 14:30:00 CST 2025
使用第三方库(如 Apache Commons Lang)
如果项目中已使用 Apache Commons Lang,可以用 FastDateFormat(线程安全的 SimpleDateFormat 替代品):
import org.apache.commons.lang3.time.FastDateFormat;
public class DateToStringApache {
public static void main(String[] args) {
Date date = new Date();
FastDateFormat formatter = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(date);
System.out.println("Formatted Date: " + formattedDate);
}
}
| 方法 | 适用场景 | 线程安全 | 备注 |
|---|---|---|---|
SimpleDateFormat |
Java 8 之前 | ❌ 不安全 | 需手动处理线程问题 |
DateTimeFormatter |
Java 8+ 推荐 | ✅ 安全 | 现代、功能强大 |
Date.toString() |
快速输出默认格式 | ✅ 安全 | 格式固定(英文) |
| Apache Commons Lang | 已使用该库的项目 | ✅ 安全 | 替代 SimpleDateFormat 的线程安全版本 |
推荐做法:
- Java 8+:优先使用
java.time包(LocalDateTime+DateTimeFormatter)。 - Java 8 之前:使用
SimpleDateFormat,但需注意线程安全(如每次新建实例或用ThreadLocal)。
