@dimlau > 如果你没有明确指定文章发布时间的时区,HUGO 默认你是指格林威治时间。这是什么狗屁逻辑?程序本身明明知道使用者所在时区,却认为使用者不使用当地时区?

Hugo 預設可以從 `TZ` 讀取特定時區,否則使用當地時間或 UTC 時間,這在模板中可以修改[^1]。時間的書寫格式是要求附帶時區的,並且由於 `time` 的文檔要求會推介使用 RFC3339,並且在無時區資訊時預設使用 UTC[^2]。這在多人協作、多地部署時很有幫助。

[^1]: gohugo.io/functions/format/#us
[^2]: Note that the RFC822, RFC850, and RFC1123 formats should be applied only to local times. Applying them to UTC times will use "UTC" as the time zone abbreviation, while strictly speaking those RFCs require the use of "GMT" in that case.

跟隨

@dimlau 對原問題更針對性的回答:

Hugo 確實明知其運行時區;但由於一些考慮並不會直接使用,例如:

1. Go `time` 庫本身的解析要求;
2. 在自動部署等情況下,運行時區不一定等同於作者所在時區;
3. 如果出現協作狀況,多名作者也可能不在一個時區;
4. ……

因此 Hugo 接受的時間格式是帶時區的時間,並且在未指定特定時區時預設爲 UTC(也算是一種慣例)。

@SakuragawaAsaba

正如我在文中所说「大部分不满来自不习惯」。

500+篇文字,我其实已经批量改了 date 格式,但是又改回去了,因为,一想到要在自己 blog 文章的文本档案里标注时区…就感觉人类不该如此卑微。

宁愿在模板里脏一点:

```
<meta property="article:published_time" content="{{.Date.Format "2006-01-02T15:04:05"}}+08:00" />
<meta property="article:modified_time" {{ printf "content=%q" (.Lastmod.Format "2006-01-02T15:04:05Z07:00") | safeHTMLAttr }} />
```
上述第二行也是脏,非要这么写才行,否则时区前的 + - 符号就会被转义。

给我的感觉就是 GO 的很多东西默认优先级都不符合我个人习惯,它默认精确,我默认方便。

@dimlau 我覺得只是一些想法沒轉過彎。舉例說:WordPress 裏也有設定作者的時區,但如果作者旅行到其他時區並且在當地時區的客戶端寫作,最後發表出來會是哪個時區呢?

我猜還是會按照原先設定的時區。因爲這本質不是一個「精確」或者「方便」的問題,而是在無法作出判斷的時候不做無用的、看似「智慧」的判斷。

@SakuragawaAsaba

比如config里自定义默认时区,出差时发布文章时在date内容里特别声明当地时区。

覆盖掉常态,单独定义异常态。这是我所说的方便。

@dimlau 沒問題,生成的時候指定 TZ 環境變數,需要的時候聲明特定時區即可。改模板的話,也可以使用 `{{ dateFormat "2006-01-02T15:04:05" $date.Local }}` 這類形式。

當然,你說的方便沒有錯。但因爲看不到原始檔是如何,所以我無法指出具體問題或者給出更直截的解決方法。我猜測,你提到的情況裏似乎根本沒有覆蓋掉常態,而是直接將所有情況都當作異常態處理了。

@SakuragawaAsaba 因为是迁移使用所以需要考虑太多兼容以前的格式及内容归档结构等问题。

如果从零开始使用的话,大概体验也会不错。

登入以加入討論
櫻川家::自閉社交

櫻川家的日常微網誌