一、SimpleDateFormat簡介
SimpleDateFormat是一個Java類庫提供的日期格式化工具類,它能夠將日期格式化成指定格式的字元串,也可以將字元串轉換成指定格式的日期。它是線程不安全的,因此在多線程情況下需要使用ThreadLocal或者synchronized保證線程安全。
二、SimpleDateFormat的使用方法
SimpleDateFormat提供了很多日期格式化選項,例如yyyy表示年份,MM表示月份,dd表示天數,HH表示24小時制的小時數,hh表示12小時制的小時數,mm表示分鐘數,ss表示秒數,SSS表示毫秒數等等。
三、24小時制的使用方法
SimpleDateFormat的默認格式是12小時制的,如果要使用24小時制,需要使用大寫的HH來表示小時數。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sdf.format(new Date()); System.out.println(dateStr);
以上代碼會輸出當前時間,格式為yyyy-MM-dd HH:mm:ss,即年-月-日 時:分:秒,採用24小時制的時間顯示。如果要將字元串轉為日期對象,需要使用parse()方法,代碼如下:
String dateStr = "2022-01-01 12:00:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse(dateStr); System.out.println(date);
以上代碼將字元串”2022-01-01 12:00:00″轉換成日期對象,並輸出日期對象。
四、SimpleDateFormat的線程安全問題
SimpleDateFormat是非線程安全的類,因為它內部會創建Calendar對象,而Calendar對象是線程安全的,所有的線程共享同一個Calendar對象。
在多線程環境下,為了保證線程安全,可以使用ThreadLocal或者synchronized加鎖的方式實現。使用ThreadLocal的代碼如下:
private static ThreadLocal<SimpleDateFormat> sdf = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } }; public static String formatDate(Date date) throws ParseException { return sdf.get().format(date); }
每個線程都會持有一個SimpleDateFormat對象,避免了多線程之間的對象共享問題。
五、小結
SimpleDateFormat是Java中常用的日期格式化工具類,它的使用方法很多,本文主要介紹了24小時制的使用方法,並且提到了SimpleDateFormat線程安全性的問題。在多線程環境下,可以使用ThreadLocal或者synchronized實現線程安全。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/188979.html