hugo整合CMS时区设置方案

问题

在hugo与Decap CMS / Sveltia CMS整合过程中,经常post无法生成的问题。

一般情况下,这个是由于时区引起的。 Decap CMS 中,对于时间格式,有一个picker_utc 参数,表示是否使用UTC时间

如果不设定,则使用本地时间,生成的时间内没有时区标识。

如果设定为true, 则生成的时间里面带一个Z, 比如2026-04-01T17:44:00Z, 表示此时间为UTC时区

理论上这里设计没有什么问题,但是对于hugo来讲,无论带Z与否,经过实测,都会按照UTC解析。这样一来,北京时间2026-04-01 17:44:00 就变成了UTC时间2026-04-01 17:44:00,这在此时是一个未来的时间,默认情况下,无法生成未来的post。

解决方案:在Decap/Sveltia CMS中的时间串中增加明确的时区标识,举例:

1
 - { label: "日期", name: "date", widget: "datetime", format: "YYYY-MM-DDTHH:mm:ss.SSS+08:00"}

picker_utc默认false, 取的是本地时间(北京时间),我们通过format强制增加了东八区标识,这样hugo不会再误认为是UTC。经测试,该格式可以由hugo正常识别。

手工维护markdown文档也可以使用类似方法。

(当然,也可以开启picker_utc,整个blog全部使用UTC,理论上也没有问题,post可以正常发布。就是时间显示成UTC对于我们并不友好,还是推荐使用format)