
在 Go 中使用 fmt.Printf 时,可通过 %02d 等动词实现数字的零填充格式化,避免单数小时、分钟、秒等缺失前导零的问题。
在 go 中使用 fmt.printf 时,可通过 `%02d` 等动词实现数字的零填充格式化,避免单数小时、分钟、秒等缺失前导零的问题。
默认情况下,fmt.Printf 中的 %d 动词以最简整数形式输出数字——不补零、不截断、不加空格。例如 3 输出为 "3",10 输出为 "10"。这在时间格式化中会导致视觉错乱:10:3:2 看似 10:03:02 的简写,但实际不符合 ISO 或常规时间显示规范。
要强制固定宽度并用前导零填充,需使用宽度修饰符与零填充标志组合:%0Nd,其中 N 是最小字段宽度,0 表示用 '0' 而非空格填充空白位。
✅ 正确写法示例:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
year, month, day := now.Date()
hour, min, sec := now.Clock()
// 使用 %02d 确保日、时、分、秒均为两位数(如 03、09)
fmt.Printf("%d-%s-%02d_%02d:%02d:%02d\n", year, month, day, hour, min, sec)
// 示例输出:2024-April-26_10:03:02
}
? 注意事项:
-
%02d中的0是填充字符标志,2是最小字段宽度;若数值本身超过 2 位(如147),仍会完整输出("147"),不会截断; - 月份(
month)是time.Month类型,%s可直接输出英文名称(如"April"),无需额外处理;若需数字月份(如04),应改用int(month)并配合%02d; - 更推荐使用
now.Format("2006-January-02_15:04:05")进行时间格式化——它更安全、可读性更高,且天然支持零填充(02、04、05均表示两位零填充)。
? 总结:%d → 无格式纯数字;%02d → 至少两位,不足则前补零;掌握 fmt 动词的宽度与填充规则,是写出清晰、健壮格式化输出的关键基础。











