【问题标题】:How to fix timezone/dst in lua's lgi?如何在lua的lgi中修复时区/ dst?
【发布时间】:2020-11-12 19:00:59
【问题描述】:

情况

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

[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 遵守我的系统时区/DST 设置?

背景

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

【问题讨论】:

    标签: lua timezone glib dst lgi


    【解决方案1】:

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

    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 报告您已正确关闭 DST,那么这样做可以吗?

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

    【讨论】:

    • 根据您链接的文档,TZ 变量不相关。并且我的区域也被正确检测到,因为 /etc/localtime 与 /etc/zoneinfo/Europe/Berlin 相同(您链接的文档也说 NULL/nil 作为时区参数是可以的。我的问题是 lgi 假定 DST 时不应该。
    • 字面意思是:g_time_zone_new_local() calls this function with the value of the TZ environment variable.
    • 是的,但我正在使用 awesome 的代码,它不使用 g_time_zone_new_local 但直接使用 g_time_zone_new,另外我的 TZ env var 未设置,因此结果相同(作为 g_time_zone_new 的参数为 null)。
    • PS:如果我在启动 lua 之前在 env 中设置 TZ=Europe/Berlin,我仍然会得到 CEST 作为时区,而不是我认为应该的 CET。
    • 使用%z 而不是%Z 我得到+0200 而不是CEST(但date +%z 给了我正确的+0100)。如果我将"UTC" 指定为glib.TimeZone.new,它会正确打印UTC 时间,但如果我给它"CET",它仍然会打印CEST!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2019-05-06
      • 1970-01-01
      • 2013-03-13
      • 2015-12-19
      • 1970-01-01
      相关资源
      最近更新 更多