前言

刚才写了一篇新文章,Front Matter 配置如下,date 设置为 2026-01-22T20:24:32Z
确认当前执行 hugo server 的时间 已经晚于该时间点,但在文章列表页中却始终看不到这篇文章。

title: "Hugo | 默认时区导致本地预览文章不显示"
date: 2026-01-22T20:24:32Z
description: ""

表现如下:新文章并未出现在本地预览的文章列表中

文章列表不显示几分钟前的文章

一开始还以为是缓存或主题的问题,排查之后才发现,问题出在 Hugo 默认使用的时区上。

原因

Hugo 默认采用的是 格林威治时间(GMT / UTC),而我平时写博客时,通常使用的是 北京时间(UTC+8),当文章的 date 写成类似 2026-01-22T20:24:32Z 时:

Z 表示 UTC 时间,Hugo 会认为这篇文章的发布时间是 UTC 的 20:24,对应到北京时间,其实是第 2 天的 04:24,所以在 Hugo 看来,这篇文章属于未来时间的文章,而 Hugo 在默认构建策略中:默认不会生成(或显示)发布时间晚于当前时间的文章,这就导致了一个看起来很诡异的现象,明明刚写完的文章,却要等 8 个小时才会显示出来

解决方案

方案一:使用 hugo server -F

(这个方式适合临时调试,但每次都要记得加参数,不太优雅)

将本地预览命令从:

hugo server

改为:

hugo server -F

-F 表示强制构建未来文章(Future posts),等价于:

hugo server --buildFuture

方案二:配置站点时区(推荐)

在站点配置文件中显式指定时区,例如:

timeZone: "Asia/Shanghai"

配置完成后,Hugo 会统一按北京时间解析文章时间,文章 date 可以直接填写本地时间,不再出现文章延迟 8 小时显示的问题。此时,文章时间需要写成:

date: 2026-01-22 20:24:32

而不是带 Z 的 UTC 格式

参考

  1. https://gohugo.com.cn/functions/time/format/

在站点配置中设置 timeZone 优先级顺序

如果本文对你有所帮助,可以请我喝杯咖啡

(完)