SimpleDateFormat类是一个以语言环境敏感的方式来格式化和解析日期的工具类。它允许你将日期格式化为字符串,或从字符串解析为日期。
格式化日期为字符串:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = sdf.format(new Date());
System.out.println(dateString);
// 2020-10-21 10:15:30
解析字符串为日期:
String dateString = "2020-10-21 10:15:30";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(dateString);
System.out.println(date);
// Wed Oct 21 10:15:30 CST 2020
SimpleDateFormat支持的日期时间模式字母有:
- y:年,可以显示2位或4位
- M:月
- d:日
- H:时 在一天中的小时数(0-23)
- h:时 在一天中的小时数(1-12)
- m:分
- s:秒
所以可以定义多种格式,如: - yyyy-MM-dd:2020-10-21
- yy-M-d h:mm a:20-10-21 10:15 上午
- EEE, MMM d, ''yy:Wed, Oct 21, '20
SimpleDateFormat不是线程安全的,如果在多线程环境下使用,可以使用ThreadLocal封装SimpleDateFormat:
public class DateUtil {
private static final ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>(){
@Override
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
};
public static String formatDate(Date date) {
return threadLocal.get().format(date);
}
}
通过ThreadLocal,每个线程会有自己独立的SimpleDateFormat对象,这样多个线程 Format 时间时就不会出现线程安全问题。
SimpleDateFormat是一个功能强大且常用的日期格式化和解析工具类。通过对其格式化模式字母的理解和掌握,可以实现多种日期格式化,并在多线程环境下注意其线程安全问题。希望通过这篇博客,可以加深您对SimpleDateFormat的认知和理解。