一、什麼是SimpleDateFormat
SimpleDateFormat是Java中的一個時間格式化工具類,可以將Date對象轉換為指定格式的字元串,也可以將符合格式的字元串轉換為Date對象。
SimpleDateFormat類位於java.text包中,是線程不安全的。
二、SimpleDateFormat的常用格式符
SimpleDateFormat支持很多日期和時間格式符,下面列舉一些常見的:
| 格式符 | 說明 |
|---|---|
| y | 年份表示:例如:2019 |
| M | 月份表示:例如:11 |
| d | 日表示:例如:01 |
| H | 小時表示:例如:15 |
| m | 分鐘表示:例如:30 |
| s | 秒表示:例如:59 |
| S | 毫秒表示:例如:234 |
三、SimpleDateFormat的常用方法
1. 格式化日期
格式化日期使用SimpleDateFormat的format方法,該方法接收一個Date類型的參數,並返回一個String類型的結果。
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public static void main(String[] args) {
Date currentDate = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentDate);
System.out.println(dateString);
}
}
2. 解析日期
解析日期使用SimpleDateFormat的parse方法,該方法接收一個符合指定格式的字元串,並返回一個Date類型的結果。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
String dateString = "2019-11-01 15:30:59";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formatter.parse(dateString);
System.out.println(date);
}
}
四、SimpleDateFormat的線程安全問題
SimpleDateFormat是線程不安全的類,因為SimpleDateFormat對象中包含了一個Calendar對象,而Calendar對象是線程共享的對象,多個線程對同一個Calendar對象進行操作會導致線程安全問題。
為了避免SimpleDateFormat線程安全問題,可以使用ThreadLocal來解決,代碼如下:
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
private static final ThreadLocal<SimpleDateFormat> THREADLOCAL_FORMAT = new ThreadLocal<SimpleDateFormat>() {
@Override
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
};
public static String format(Date date) {
return THREADLOCAL_FORMAT.get().format(date);
}
}
五、總結
SimpleDateFormat是Java中一個用於日期和時間格式化的工具類,可以將Date對象轉換為指定格式的字元串,也可以將符合格式的字元串轉換為Date對象。使用SimpleDateFormat時要注意它是線程不安全的,為了避免線程安全問題,可以使用ThreadLocal來限制SimpleDateFormat的共享範圍。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/189045.html
微信掃一掃
支付寶掃一掃