java格式化date成字符串的詳細方法和示例
前言
在Java中將java.util.Date對象格式化為字符串,主要使用SimpleDateFormat類(或Java 8及更高版本的DateTimeFormatter)。以下是詳細方法和示例:
一、使用SimpleDateFormat(Java 7及以下)
步驟:
創(chuàng)建SimpleDateFormat對象:指定日期格式模式(如
"yyyy-MM-dd HH:mm:ss")。調(diào)用format()方法:將
Date對象轉(zhuǎn)換為字符串。
常用格式符號:
| 符號 | 含義 | 示例 |
|---|---|---|
yyyy | 四位年份 | 2025 |
MM | 兩位月份 | 06 |
dd | 兩位日期 | 24 |
HH | 24小時制 | 14 |
hh | 12小時制 | 02 |
mm | 分鐘 | 30 |
ss | 秒 | 45 |
SSS | 毫秒 | 789 |
E | 星期幾 | Tue |
a | AM/PM標記 | PM |
z | 時區(qū) | CST |
代碼示例:
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// 創(chuàng)建Date對象(當前時間)
Date date = new Date();
// 示例1:格式化為"年-月-日 時:分:秒"
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str1 = sdf1.format(date); // 如:2025-06-24 15:30:45
System.out.println(str1);
// 示例2:格式化為"月/日/年 時:分 AM/PM"
SimpleDateFormat sdf2 = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
String str2 = sdf2.format(date); // 如:06/24/2025 03:30 PM
System.out.println(str2);
// 示例3:自定義格式(帶星期和時區(qū))
SimpleDateFormat sdf3 = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z");
String str3 = sdf3.format(date); // 如:Tue, 24 Jun 2025 15:30:45 CST
System.out.println(str3);
}
}
二、注意事項
線程安全問題
SimpleDateFormat非線程安全。多線程環(huán)境下建議:每次創(chuàng)建新實例(性能較低),或
使用
ThreadLocal封裝實例。private static final ThreadLocal<SimpleDateFormat> threadSafeFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd")); String formattedDate = threadSafeFormat.get().format(date);
異常處理
解析字符串時需捕獲
ParseException,但格式化操作一般無需異常處理。時區(qū)設置
默認使用系統(tǒng)時區(qū)??赏ㄟ^
setTimeZone()修改:sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
三、Java 8+ 推薦方案(DateTimeFormatter)
Java 8引入的java.time.format.DateTimeFormatter線程安全且更靈活:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
// 格式化為字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDate = now.format(formatter); // 如:2025-06-24 15:30:45
System.out.println(formattedDate);
}
}
四、總結(jié)
| 方法 | 適用場景 | 線程安全 |
|---|---|---|
SimpleDateFormat | Java 7及以下 | ? 否 |
DateTimeFormatter | Java 8+ | ? 是 |
簡單需求:直接使用
SimpleDateFormat.format()。高并發(fā)場景:用
ThreadLocal或升級到Java 8的DateTimeFormatter。復雜操作:優(yōu)先選擇
java.time包(如LocalDateTime、ZonedDateTime)。
可通過在線工具(如 SimpleDateFormat Tester)驗證格式模式是否正確。
總結(jié)
到此這篇關(guān)于java格式化date成字符串的文章就介紹到這了,更多相關(guān)java格式化date成字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Comparator.comparing比較導致空指針異常的解決
這篇文章主要介紹了Java Comparator.comparing比較導致空指針異常的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Spring中過濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系解析
在我們?nèi)粘5拈_發(fā)中,我們經(jīng)常會用到Filter和Interceptor,這篇文章主要介紹了Spring中過濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系?,需要的朋友可以參考下2022-10-10
TransmittableThreadLocal通過javaAgent實現(xiàn)線程傳遞并支持ForkJoin
這篇文章主要介紹了TransmittableThreadLocal通過javaAgent實現(xiàn)線程傳遞并支持ForkJoin詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
Springboot在有參構(gòu)造方法類中使用@Value注解取值
這篇文章主要介紹了Springboot在有參構(gòu)造方法類中使用@Value注解取值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
SpringBoot?@Configuration與@Bean注解使用介紹
這篇文章主要介紹了SpringBoot中的@Configuration與@Bean注解,在進行項目編寫前,我們還需要知道一個東西,就是SpringBoot對我們的SpringMVC還做了哪些配置,包括如何擴展,如何定制,只有把這些都搞清楚了,我們在之后使用才會更加得心應手2022-10-10

