在Java中如何使用SimpleDateFormat格式化日期

SimpleDateFormat用于格式化和解析日期,通过模式字符串如"yyyy-MM-dd HH:mm:ss"将Date对象与字符串互转,format()方法格式化日期,parse()方法解析字符串,需处理ParseException,且该类非线程安全,建议局部使用或改用Java 8的DateTimeFormatter。

在Java中,SimpleDateFormat 是一个用于格式化和解析日期的类,它继承自 java.text.DateFormat。通过定义特定的模式字符串,你可以将 Date 对象转换为可读的字符串,也可以将日期字符串解析回 Date 对象。

创建 SimpleDateFormat 并格式化日期

使用 SimpleDateFormat 的构造函数传入一个模式字符串来创建实例,然后调用 format() 方法将 Date 对象转为字符串。

  • yyyy:四位年份
  • MM:两位月份(01-12)
  • dd:两位日期(01-31)
  • HH:24小时制小时(00-23)
  • mm:分钟(00-59)
  • ss:秒(00-59)

示例代码:

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatExample {
    public static void main(String[] args) {
        Date now = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = formatter.format(now);
        System.out.println("格式化后的日期: " + formattedDate);
    }
}

解析字符串为日期对象

如果你有一个符合特定格式的日期字符串,可以使用 parse() 方法将其转换为 Date 对象。

注意:该方法可能抛出 ParseException,需要处理异常。

示例:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateParseExample {
    public static void main(String[] args) {
        String dateStr = "2025-05-20 14:30:00";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date parsedDate = formatter.parse(dateStr);
            System.out.println("解析后的日期: " + parsedDate);
        } catch (ParseException e) {
            System.out.println("日期格式错误: " + e.getMessage());
        }
    }
}

常见注意事项

SimpleDateFormat 不是线程安全的。如果在多线程环境中使用同一个实例,可能会导致数据错误。建议:

  • 在方法内部局部创建实例
  • 使用 ThreadLocal 管理每个线程的实例
  • 考虑使用 Java 8 的 DateTimeFormatter(推荐)

基本上就这些。掌握模式写法和基本用法,就能应对大多数日期格式化需求。虽然现在更推荐使用新的时间API,但在维护老项目时,SimpleDateFormat依然很常见。