Java String.format 完整指南:格式化符號、標誌、日期時間與實戰示例
String.format() 是 Java 字符串格式化的核心工具,語法類似 C 的 sprintf()。本文系統整理通用類型轉換符、格式標誌、日期時間組合格式及精確控制符,附帶完整測試代碼與輸出結果。
方法簽名
// 使用默認 Locale
String format(String format, Object... args)
// 指定 Locale
String format(Locale locale, String format, Object... args)
通用類型轉換符速查表
| 轉換符 | 說明 | 示例輸出 |
| %s | 字符串 | "mingrisoft" |
| %c | 字符 | 'm' |
| %b | 布爾 | true |
| %d | 十進制整數 | 99 |
| %x | 十六進制整數 | FF |
| %o | 八進制整數 | 77 |
| %f | 浮點數 | 99.99 |
| %e | 指數格式 | 9.38e+5 |
| %g | 通用浮點(f/e較短者) | 42.5 |
| %h | 散列碼 | 41 |
| %% | 百分號 | % |
| %n | 換行符 | (平台相關) |
| %tX | 日期時間組合(X 為子格式) | 見下表 |
格式標誌修飾符
| 標誌 | 作用 | 示例 | 結果 |
| + | 正負號 | ("%+d", 15) | +15 |
| - | 左對齊 | ("%-5d", 15) | |15 | |
| 0 | 前導零 | ("%04d", 99) | 0099 |
| 空格 | 正數前加空格 | ("% 4d", 99) | | 99| |
| , | 千分位分組 | ("%,f", 9999.99) | 9,999.990000 |
| ( | 負數括號 | ("%(f", -99.99) | (99.990000) |
| # | 替代格式 | ("%#x", 99) | 0x63 |
| < | 復用前一參數 | ("%f和%<3.2f", 99.45) | 99.450000和99.45 |
| $ | 參數索引 | ("%1$d,%2$s", 99,"abc") | 99,abc |
日期時間組合格式(%tX)
| 轉換符 | 說明 | 示例 |
| %tc | 完整日期時間 | 星期一 九月 10 10:43:36 CST 2012 |
| %tF | 年-月-日 | 2012-09-10 |
| %tD | 月/日/年 | 09/10/12 |
| %tr | 12小時制 | 10:43:36 上午 |
| %tT | 24小時制 | 10:43:36 |
| %tR | 時:分 | 10:43 |
日期組件精確控制符
| 符號 | 含義 | 示例 |
| %tb/%tB | 月份簡稱/全稱 | Sep / September |
| %ta/%tA | 星期簡稱/全稱 | Mon / Monday |
| %tC | 年份前兩位 | 20 |
| %ty | 年份後兩位 | 12 |
| %tj | 年間天數 | 254 |
| %tm | 兩位月份 | 09 |
| %td/%te | 兩位日期/不補零日期 | 10 / 10 |
時間組件精確控制符
| 符號 | 含義 | 示例 |
| %tH/%tI | 24/12小時制兩位小時 | 15 / 03 |
| %tk/%tl | 24/12小時制不補零小時 | 15 / 3 |
| %tM | 兩位分鐘 | 03 |
| %tS | 兩位秒 | 09 |
| %tL | 三位毫秒 | 015 |
| %tN | 九位納秒 | 562000000 |
| %tp | 上午/下午標記 | am / 上午 |
| %tz | RFC822 時區偏移 | +0800 |
| %tZ | 時區縮寫 | CST |
| %ts | Unix 時間戳(秒) | 1347246232 |
| %tQ | Unix 時間戳(毫秒) | 1347246232773 |
實戰示例代碼
public static void main(String[] args) {
Date date = new Date();
// 綜合示例
System.out.printf("現在時間:%tF %tT%n", date, date);
System.out.printf("格式化價格:%,.2f 元%n", 1234567.89);
System.out.printf("對齊顯示:|%-10s|%10d|%n", "Name", 100);
System.out.printf("參數復用:%s %<s %<s%n", "Hello");
}
常見陷阱提醒
%f 默認保留 6 位小數,金額場景務必指定精度如 %.2f
- 日期格式區分大小寫:
%tY 是年份四位,%ty 是兩位
- 中文環境下
%tp 輸出「上午/下午」,英文環境輸出「am/pm」
- 線程安全:
String.format 內部使用 Formatter 非線程安全,但方法級局部變量安全