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

