一、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-hant/n/256333.html