如何在 lua 的 lgi 中修复 timezone/dst?

How to fix timezone/dst in lua's lgi?

情况

在我看来,我的时区配置正确,因为

[nix-shell:~]$ date +"%T %Z"
19:49:07 CET

我得到了我所期望的。

但是对于 lua 的 lgi 库,我似乎在使用夏令时,而正常的 lua 函数遵循系统设置:

[nix-shell:~]$ lua
Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> for k,v in pairs(os.date("*t")) do print(k,v) end
isdst   false
sec 31
min 51
month   11
day 12
hour    19
yday    317
wday    5
year    2020
> glib=require"lgi".GLib
> return glib.DateTime.new_now(glib.TimeZone.new()):format("%F %T %Z")
2020-11-12 20:51:52 CEST

问题

在哪里以及如何让 lgi 遵守我的系统 timezone/DST 设置?

背景

lgi 被很棒的 WM 用于时钟小部件,所以我希望它是正确的。

.new_local() 使用正确的 TZ 环境变量调用 .new()

https://developer.gnome.org/glib/stable/glib-GTimeZone.html#g-time-zone-new

return glib.DateTime.new_now(glib.TimeZone.new_local()):format("%F %T %Z")

只需确保您的 TZ 环境变量设置正确。

https://www.cyberciti.biz/faq/linux-unix-set-tz-environment-variable


您认为 AwesomeWM 会自动计算出时区,但谁知道呢……OS.date 报告说您正确地关闭了夏令时,那么这样做可以吗?

if os.date('*t').isdst then
    wibox.widget.textclock( timezone='CEST' )
else
    wibox.widget.textclock( timezone='CET' )
end

在我的特殊情况下,我的发行版在更新 zoneinfo 文件时确实犯了一个“错误”:

问题是 tzdata 包确实改变了文件格式,但应用程序(在我的例子中是很棒的 WM)不支持新格式。

分发的解决方案是安装旧格式的新数据文件。