杰瑞科技汇

java date转换成string

  1. 传统方法:使用 SimpleDateFormat (Java 8 之前)
  2. 现代方法:使用 java.time (Java 8 及以上,推荐)

下面我将详细介绍这两种方法,并提供完整的代码示例。

java date转换成string-图1
(图片来源网络,侵删)

使用 SimpleDateFormat (传统方法)

SimpleDateFormat 是一个具体的类,用于以区域设置敏感的方式格式化和解析日期,它定义了如何将日期/时间对象转换为字符串(格式化),以及如何将字符串转换回日期/时间对象(解析)。

核心步骤:

  1. 创建 SimpleDateFormat 的实例,并传入你想要的日期格式字符串。
  2. 调用 format() 方法,将 Date 对象作为参数传入,该方法会返回格式化后的 String

常用格式化字符:

字符 含义 示例
y yyyy (2025), yy (23)
M MM (09), M (9)
d dd (05), d (5)
H 小时 (24小时制) HH (14)
h 小时 (12小时制) hh (02)
m 分钟 mm (05)
s ss (09)
S 毫秒 SSS (123)
E 星期几 EEE (Wed)
z 时区 z (GMT+08:00)

代码示例:

import java.text.SimpleDateFormat;
import java.util.Date;
public class DateToStringSimpleDateFormat {
    public static void main(String[] args) {
        // 1. 获取当前的 Date 对象
        Date now = new Date();
        System.out.println("原始 Date 对象: " + now);
        // 2. 定义几种常见的日期格式
        // 格式1: yyyy-MM-dd ( 2025-10-27)
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        String strDate1 = sdf1.format(now);
        System.out.println("格式1 (yyyy-MM-dd): " + strDate1);
        // 格式2: yyyy/MM/dd HH:mm:ss ( 2025/10/27 14:30:55)
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String strDate2 = sdf2.format(now);
        System.out.println("格式2 (yyyy/MM/dd HH:mm:ss): " + strDate2);
        // 格式3: yyyy年MM月dd日 HH时mm分ss秒 (中文格式)
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        String strDate3 = sdf3.format(now);
        System.out.println("格式3 (中文格式): " + strDate3);
        // 格式4: EEE, MMM d, yyyy ( Fri, Oct 27, 2025)
        SimpleDateFormat sdf4 = new SimpleDateFormat("EEE, MMM d, yyyy");
        String strDate4 = sdf4.format(now);
        System.out.println("格式4 (EEE, MMM d, yyyy): " + strDate4);
    }
}

注意事项 (非常重要!): SimpleDateFormat 不是线程安全的,如果在多线程环境下共享同一个 SimpleDateFormat 实例,可能会导致程序出错或产生不可预期的结果,最佳实践是在每次使用时都创建一个新的实例,或者使用 ThreadLocal 来为每个线程维护一个实例。


使用 java.time 包 (现代方法,推荐)

从 Java 8 开始,Java 引入了全新的 java.time 包,它提供了更强大、更易用、更线程安全的日期和时间 API,这是目前处理日期和时间的标准方式。

Date 对象本质上是包含一个 long 类型的时间戳(自 1970-01-01 00:00:00 UTC以来的毫秒数),我们需要先将其转换为 java.time 中的类,然后再进行格式化。

java date转换成string-图2
(图片来源网络,侵删)

核心步骤:

  1. java.util.Date 转换为 java.time.InstantInstant 是一个时间线上的点,可以看作是 Date 的现代替代品。
  2. Instant 转换为 java.time.ZonedDateTimejava.time.LocalDateTimeZonedDateTime 包含时区信息,而 LocalDateTime 不包含。
  3. 使用 java.time.format.DateTimeFormatter 来定义格式。
  4. 调用 format() 方法进行格式化。

代码示例:

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class DateToStringJavaTime {
    public static void main(String[] args) {
        // 1. 获取当前的 Date 对象
        Date now = new Date();
        System.out.println("原始 Date 对象: " + now);
        // 2. 将 Date 转换为 Instant
        Instant instant = now.toInstant();
        // 3. 将 Instant 转换为 ZonedDateTime (带有时区信息)
        // 使用系统默认时区
        ZonedDateTime zonedDateTime = instant.atZone(ZoneId.systemDefault());
        System.out.println("ZonedDateTime (系统默认时区): " + zonedDateTime);
        // 4. 定义 DateTimeFormatter
        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
        String strDate1 = zonedDateTime.format(formatter1);
        System.out.println("格式化后 (带时区): " + strDate1);
        // 5. 如果不需要时区信息,可以转换为 LocalDateTime
        LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        String strDate2 = localDateTime.format(formatter2);
        System.out.println("格式化后 (无时区): " + strDate2);
        // 6. 另一种转换方式:直接从 Date 转换为 LocalDateTime
        // 这会使用 JVM 的默认时区,结果可能与上面的 ZonedDateTime 转换不同
        LocalDateTime localDateTimeFromLegacy = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        System.out.println("从 Date 直接转换的 LocalDateTime: " + localDateTimeFromLegacy);
    }
}

java.time 的优势:

  • 线程安全DateTimeFormatter 和其他 java.time 类都是不可变的(immutable),因此是线程安全的,可以在任何地方安全地共享。
  • API 设计更优秀:方法命名清晰,逻辑更直观。
  • 功能更强大:提供了更丰富的日期和时间计算方法。
  • 解决了 DateCalendar 的许多设计缺陷

总结与对比

特性 SimpleDateFormat java.time (DateTimeFormatter)
Java 版本 Java 1.1 及以上 Java 8 及以上 (推荐)
线程安全 不安全 安全 (不可变)
易用性 API 略显陈旧 API 更现代、更直观
功能 基本格式化 功能强大,支持复杂的日期时间计算
转换 直接格式化 Date 需先将 Date 转为 Instant,再转为 ZonedDateTimeLocalDateTime
  • 如果你正在使用 Java 8 或更高版本,强烈建议使用 java.time,它是未来,更安全、更强大。
  • 如果你必须在旧版 Java (Java 7 或更早) 项目中工作,SimpleDateFormat 是唯一的选择,请务必注意线程安全问题,每次使用都新建实例。
java date转换成string-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇