jekyll-timezone

Jekyll的时区和时间 2019-12-02 07:00:00 +0800 | 建站 | Jekyll 时区 GitHub Pages 在填写博文Front Matter里的日期时间date变量时如果不带时区字段,一律视为UTC标准时+0000时区,如果要填写其他时区的时间必须指明时区,类似这样2019-12-02 07:00:00 +0800。在_config.yml设置修改timezone变量只关乎日期时间date的显示效果,而不影响真正的时间值。下面详述:

时区的设置

用Jekyll撰写博客时,博文最前面Front Matter头信息中日期时间date变量格式为YYYY-MM-DD HH:MM:SS +/-TTTT,其中+/-TTTT为时区字段,其值为所在时区对UTC标准时的偏移量。如果填写的时间不带时区字段,则一律视为UTC标准时即+0000,而与其他任何设置无关。如果要填写其他时区的时间,必须加上时区字段,这是唯一正确的做法。

如2019-11-13 12:00:00表示UTC标准时中午12点,等价于2019-11-13 12:00:00 +0000。如东八区北京时间早7点要写为2019-12-02 07:00:00 +0800。以下为完整的Front Matter示例:

1
2
3
4
5
6
---
layout: post
title: Jekyll的时区和时间
date: 2019-12-02 07:00:00 +0800
tags: [Jekyll, 网页编写, 网站建设, GitHub Pages]
---

时区的显示

Jekyll渲染生成静态网页后的显示时间(引用page.date变量),也就是我们要在网页里展示的时间,默认情况下显示的时区是由Jekyll运行环境的操作系统时区决定的。

比如本地操作系统时区为+0800,网页里就显示+0800的时间; 而GitHub Pages系统时区为+0000,显示的就是+0000的时间。

Jekyll会自动将我们之前在date里填写的时间进行时区转换。

上例中我们填写了北京时间2019-12-02 07:00:00 +0800,在本地测试时显示为2019-12-02 07:00:00 +0800

部署到GitHub Pages(使用其内置的Jekyll)时显示为2019-12-01 23:00:00 +0000

改变显示的时区

如果想改变page.date变量显示的时区,可以在_config.yml设置变量timezone,其默认值为操作系统时区,设定值请参考List of tz database time zones。 比如要显示为+0800的北京时间,其值要设为Asia/Shanghai,这样在GitHub Pages就也能显示为如图1的效果了。

1
timezone: Asia/Shanghai

date变量只写了日期或没有设置date变量时的处理

当文章的Front Matter里date变量只写了日期没写时间,Jekyll会将YYYY-MM-DD作为日期;如果未设置data变量,则会将文件名里的YYYY-MM-DD作为日期。然后使用00:00:00作为时间,使用timezone设置的时区作为时区,构成完整的日期时间page.date。

例如一篇博文“2019-12-02-标题.md”中没有设置date变量,则 当timezone为+0800(Asia/Shanghai)时,page.date的时间是2019-12-02 00:00:00 +0800 当timezone为+0000(UTC)时     ,page.date的时间是2019-12-02 00:00:00 +0000 可以注意到这两个日期时间是有时间差的。

Jekyll对时间合理性的检查

这里要提一点,Jekyll生成静态网页时会检查时间的合理性,未来时间的博文不会被渲染生成。比如现在是北京时间2019年12月2日早7点,则将博文Front Matter里的date设置为2019-12-02 09:00:00 +0800是不行的,Jekyll会跳过此文件不处理。

只写日期不写时间时要特别注意,比如现在我的操作系统时间是+0800时区北京时间2019年12月2日早7点,我已经写好了文件名为“2019-12-02-标题.md”的一篇博文,未设置date变量,在本机上运行Jekyll生成浏览正常,但我将此文推送到GitHub Pages上去却没能生成对应的网页。这是因为GitHub Pages上内置的Jekyll所在的操作系统时区为UTC+0000,此时正是2019年12月1日晚23点,这个文件的日期2019年12月2日对于它来说是非法的“未来日期”,此文件被跳过不处理。

此时就要设置_config.yml文件里的timezone变量,将其值设为Asia/Shanghai即+0800东八区,并将此文件一并推送更新到GitHub。如此让GitHub Pages上的Jekyll也按+0800时区处理日期时间,这样2019年12月2日就是合法时间,能正常生成博文了。