在Java中将Date转换为String有多种方法,以下是常用的几种方式:
1. 使用 SimpleDateFormat(传统方式,Java 8之前)
import java.text.SimpleDateFormat; import java.util.Date; // 创建Date对象 Date date = new Date(); // 创建SimpleDateFormat对象,指定格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 转换为字符串 String dateString = sdf.format(date); System.out.println(dateString); // 输出:2026-01-26 10:30:452. 使用 DateTimeFormatter(Java 8+ 推荐)
import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Date; // 方法1:Date -> Instant -> LocalDateTime Date date = new Date(); Instant instant = date.toInstant(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); // 定义格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String dateString = localDateTime.format(formatter); System.out.println(dateString); // 方法2:更简洁的方式 String formatted = date.toInstant() .atZone(ZoneId.systemDefault()) .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));3. 使用 FastDateFormat(Apache Commons Lang)
import org.apache.commons.lang3.time.FastDateFormat; import java.util.Date; FastDateFormat fastDateFormat = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss"); String dateString = fastDateFormat.format(new Date());4. 预定义格式示例
import java.text.SimpleDateFormat; import java.util.Date; Date date = new Date(); // 只显示日期 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(dateFormat.format(date)); // 2026-01-26 // 只显示时间 SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); System.out.println(timeFormat.format(date)); // 10:30:45 // 中文格式 SimpleDateFormat chineseFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); System.out.println(chineseFormat.format(date)); // 2026年01月26日 10时30分45秒 // ISO 8601格式 SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); System.out.println(isoFormat.format(date)); // 2026-01-26T10:30:45Z5. 线程安全的格式化(Java 8+)
import java.time.format.DateTimeFormatter; import java.util.Date; // 线程安全的formatter private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); public String formatDate(Date date) { return date.toInstant() .atZone(ZoneId.systemDefault()) .format(FORMATTER); }6. 常用格式模式
符号 | 含义 | 示例 |
|---|---|---|
yyyy | 年份 | 2026 |
MM | 月份(两位) | 01 |
M | 月份(一位或两位) | 1 |
dd | 日期(两位) | 26 |
d | 日期(一位或两位) | 26 |
HH | 24小时制小时 | 14 |
hh | 12小时制小时 | 02 |
mm | 分钟 | 30 |
ss | 秒 | 45 |
SSS | 毫秒 | 123 |
E | 星期几 | Mon |
a | 上午/下午 | PM |
推荐方案
Java 8及以上:推荐使用
DateTimeFormatter,线程安全且功能更强大Java 8以下:使用
SimpleDateFormat,但要注意它不是线程安全的如果需要频繁格式化,考虑使用线程局部变量(ThreadLocal)包装 SimpleDateFormat,或使用 Apache Commons Lang 的 FastDateFormat