如何在未设置“$TZ”的情况下获取“TZ”?

如何在未设置“$TZ”的情况下获取“TZ”?

我正在编写一个 Ruby 程序。我需要一种方法来获得类似America/New_Yorkas的东西ActiveSupport::TimeZone,但require "tzinfo"无法获得我当前的时区。 (请注意,Time.now.zone可以得到类似的内容EST,但我需要 tz 数据库格式,例如America/New_York。)尽管执行此操作的简单方法是让用户设置$TZ,TZ='America/New_York'; export TZtzselect.我正在寻找一种无需用户设置即可执行此操作的方法TZ。是否有一些我可以加载的系统文件,或者我可以查询的网络位置?

我需要时区之类的东西。

require "active_support/core_ext/time/zones"

Time.zone = ENV['TZ']
p Time.zone.now # Returns current time in the local time zone using ActiveSupport.

答案1

在 glibc 上,默认时区保留在/etc/localtime.这可能是 tz 数据库中文件的符号链接(在这种情况下,您可以简单地读取链接),但不能保证 - 它可能是硬链接,甚至是副本。在这种情况下,您必须读取该文件,然后将其与 tz 数据目录中的所有文件进行比较。

我不确定您认为获取该值America/New_York会有什么目的。

相关内容