一、SimpleDateFormat簡介
SimpleDateFormat是Java中一個常用的時間格式化類,通過SimpleDateFormat可以將Date類型的時間轉換成指定格式的字元串,也可以將指定格式的字元串轉換成Date類型的時間。下面我們來詳細了解一下SimpleDateFormat的使用方法。
二、SimpleDateFormat常用格式符
SimpleDateFormat中常用的格式符有:
符號 含義 y 年 M 月 d 日 H 時(24小時制) h 時(12小時制) m 分 s 秒 S 毫秒 E 星期幾 D 一年中的第幾天
在使用SimpleDateFormat時,可以將這些格式符組合起來以達到指定格式的效果。
三、SimpleDateFormat使用示例
1、將Date類型轉換成指定格式字元串
使用SimpleDateFormat將Date類型格式化成指定格式的字元串:
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateFormatDemo {
public static void main(String[] args) throws Exception {
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String dateString = formatter.format(date);
System.out.println(dateString);
}
}
輸出:
2022-01-01 11:11:11.111
2、將指定格式的字元串轉換成Date類型
使用SimpleDateFormat將指定格式的字元串轉換成Date類型的時間:
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateFormatDemo {
public static void main(String[] args) throws Exception {
String dateString = "2022-01-01 11:11:11.111";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date date = formatter.parse(dateString);
System.out.println(date);
}
}
輸出:
Sat Jan 01 11:11:11 CST 2022
四、SimpleDateFormat線程安全問題
SimpleDateFormat存在線程安全問題,因此在多線程環境下使用SimpleDateFormat時,可能會出現數據錯誤的情況。解決該問題的方法有兩種:
1、每次使用時創建新的SimpleDateFormat對象;
2、使用ThreadLocal解決線程安全問題。
1、每次使用時創建新的SimpleDateFormat對象
這種解決方案比較簡單,但由於SimpleDateFormat對象是比較重的對象,頻繁地創建和銷毀會造成性能問題。
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateFormatDemo {
public static void main(String[] args) throws Exception {
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String dateString = formatter.format(date);
System.out.println(dateString);
}
}
2、使用ThreadLocal解決線程安全問題
使用ThreadLocal可以在多線程環境下解決SimpleDateFormat的線程安全問題。ThreadLocal可以為每個線程提供獨立的SimpleDateFormat對象,從而避免了線程安全問題。
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateFormatDemo {
private static final ThreadLocal sdf = new ThreadLocal() {
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
}
};
public static void main(String[] args) throws Exception {
Date date = new Date();
String dateString = sdf.get().format(date);
System.out.println(dateString);
}
}
五、SimpleDateFormat異常處理
在使用SimpleDateFormat時,可能會出現解析或者格式化異常,此時會拋出ParseException或者IllegalArgumentException異常。我們可以通過如下的方式來處理異常:
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;
public class DateFormatDemo {
public static void main(String[] args) {
try {
String dateString = "2022/01/01 11:11:11.111";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date date = formatter.parse(dateString);
System.out.println(date);
} catch(ParseException e) {
e.printStackTrace();
} catch(IllegalArgumentException e) {
e.printStackTrace();
}
}
}
六、SimpleDateFormat注意事項
1、SimpleDateFormat是非線程安全的,在多線程環境下需要進行處理;
2、SimpleDateFormat在格式化和解析時,需要和指定格式相符,否則會報異常。
七、總結
通過本篇文章,我們了解了SimpleDateFormat的使用方法,包括常用格式符、將Date類型轉換成指定格式字元串、將指定格式的字元串轉換成Date類型、線程安全問題、異常處理和注意事項等方面的內容。SimpleDateFormat是Java中一個非常常用的時間格式化工具,在實際開發中需要掌握其使用方法和注意事項。我們需要注意SimpleDateFormat的線程安全問題,在多線程環境下使用時,要麼為每個線程創建一個SimpleDateFormat對象,要麼使用ThreadLocal解決線程安全問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/256333.html
微信掃一掃
支付寶掃一掃