1、SimpleDateFormat類的基本用法
SimpleDateFormat類是Java中常用的時間格式化工具,它可以將Date類型轉換成指定格式的字符串,也可以將指定格式的字符串轉換成Date類型。
以下是一個簡單的代碼示例:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = sdf.format(new Date()); System.out.println(dateString);
這段代碼將當前時間按照”yyyy-MM-dd HH:mm:ss”的格式轉換成字符串。
SimpleDateFormat可以支持的格式化選項如下:
- y:年份(例如:2018,18)
- M:月份(例如:01,12,Jan,December)
- d:日期(例如:01,31)
- H:小時(24小時制,例如:00,23)
- m:分鐘(例如:00,59)
- s:秒(例如:00,59)
- S:毫秒(例如:000,999)
- E:星期幾(例如:Mon,Monday)
- D:一年中的第幾天(例如:001,365)
- w:一年中的第幾周(例如:01,52)
- k:小時(1~24小時制,例如:1,24)
- K:小時(0~11小時制,例如:0,11)
- z:時區(例如:GMT+08:00)
2、SimpleDateFormat線程安全的問題
SimpleDateFormat是線程不安全的,如果將它用於多線程環境中,可能會出現轉換異常的情況,比如字符串轉化為期望的日期格式失敗。解決這個問題,可以使用ThreadLocal來解決。
以下是一個簡單的ThreadLocal示例:
ThreadLocal sdf = new ThreadLocal(){ protected SimpleDateFormat initialValue(){ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } }; String dateString = sdf.get().format(new Date()); System.out.println(dateString);
這段代碼將SimpleDateFormat放在ThreadLocal中,每個線程都有自己的SimpleDateFormat對象,避免了線程並發的問題。
3、Date和Calendar類的格式化
除了可以使用SimpleDateFormat類來進行時間格式化外,還可以使用Date和Calendar類提供的方法來進行格式化。
以下是一個基於Date類的代碼示例:
Date date = new Date(); DateFormat dateFormat = DateFormat.getDateInstance(); String dateString = dateFormat.format(date); System.out.println(dateString);
這段代碼將當前時間按照默認格式進行了轉換。
以下是一個基於Calendar類的代碼示例:
Calendar calendar = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = sdf.format(calendar.getTime()); System.out.println(dateString);
這段代碼將當前時間按照指定格式進行了轉換。
4、JSR-310模塊中的時間格式化
Java 8之後加入了JSR-310模塊,其中就包含了時間格式化的類DateTimeFormatter。相比於SimpleDateFormat,它不僅線程安全,還提供了更多的時間格式選項。
以下是一個基於DateTimeFormatter的代碼示例:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String dateString = LocalDateTime.now().format(formatter); System.out.println(dateString);
這段代碼將當前時間按照指定格式進行了轉換。
5、Java時間格式化的性能對比
在使用時間格式化的過程中,性能也是一個非常重要的因素。下面我們來對比一下各種時間格式化方法的性能。
以下是測試代碼:
public static void main(String[] args) { Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); long startTime = System.nanoTime(); for (int i = 0; i < 1000000; i++) { String dateString = simpleDateFormat.format(date); } long midTime = System.nanoTime(); for (int i = 0; i < 1000000; i++) { String dateString = dateTimeFormatter.format(LocalDateTime.now()); } long endTime = System.nanoTime(); System.out.println("SimpleDateFormat:" + (midTime - startTime)); System.out.println("DateTimeFormatter:" + (endTime - midTime)); }
測試結果表明,簡單日期格式(SimpleDateFormat)的性能並不如JSR-310模塊中的時間格式化(DateTimeFormatter)。針對不同的場景可以選擇不同的時間格式化方式。
原創文章,作者:CYQIM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/369083.html