如何在 Lua 的 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 尊重我的系统时区/夏令时设置?

背景

awesome WM 的时钟挂件使用 lgi,所以我希望它是正确的。

点赞
用户3342050
用户3342050

.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
2020-11-12 19:30:19
用户4102092
用户4102092

在我特定的情况下,当我的发行版更新区域信息文件时确实出了一个“错误”:

问题在于 tzdata 包更改了文件格式,但应用程序(在我的情况下为 awesome WM)不支持新格式。

解决方案来自于发行版,即在旧格式中安装新的数据文件。

2020-11-14 16:56:24