java Date转换为string

在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:45

2. 使用 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:45Z

5. 线程安全的格式化(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

相关推荐
weixin_307779136 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
一水鉴天9 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel9 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
Wang's Blog10 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_9620715711 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
\光辉岁月/12 小时前
5.java-数组
java·开发语言
Java后端的Ai之路12 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
谢亮_vipxieliang12 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
时间的拾荒人12 小时前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试
郑州光合科技余经理12 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程