当 TZ= ":/etc/localtime" 时获取本地时间的正确方法是什么?



我的环境变量 TZ 设置为 :/etc/localtime 。文件/etc/localtime是指向文件/usr/share/zoneinfo/America/Chicago的符号链接。到目前为止,我正在使用它来获取本地时间对象:

Time.local(
  Crystal::System::Time.load_localtime.not_nil!
) 
# 2019-07-16 20:46:50 -05:00

因为以下内容给了我一个设置为 UTC 的时间:

Time.local   # 2019-07-17 01:46:50 UTC

Crystal 标准库是否应该返回 TZ=":/etc/localtime" 的 UTC 位置,或者我是否应该手动将 TZ 设置为时区(例如"美国/芝加哥"(?

Time::Location仅支持相对于 zoneinfo 数据库的路径的TZ值(例如:America/Chicago (。它目前无法解析绝对路径。不过,这可以作为功能请求添加。

Time.local给你一个UTC的时间,仅仅是因为Time::Location.load_local无法理解ENV["TZ"]的值并默认为 UTC。如果您只是取消设置TZ,它应该按预期工作。

如果未设置 TZ,则默认为 /etc/localtime 引用的值。因此,您的自定义工作根本不需要。特别是Crystal::System::Time不应该直接从用户代码调用。

相关内容

  • 没有找到相关文章

最新更新