【问题标题】:How do I infer the current timezone in Elixir or Erlang?如何在 Elixir 或 Erlang 中推断当前时区?
【发布时间】:2017-01-24 02:29:10
【问题描述】:

Elixir 或 Erlang 有没有办法打印出当前时区的名称?我知道我可以通过调用 Erlang 日历模块来获取 Elixir 中的当地时间。

:calendar.local_time

我可以使用 Calendar 包在 Elixir 中获取当前的 UTC 时间:

Calendar.DateTime.now_utc()

但是,这些软件包都没有为我提供返回当前时区名称的方法。我想以 UTC 存储我的日期,但在本地时区显示它们。在我居住的地方,当前时区称为“MST7MDT”(当 DST 无效时称为“MST”),但我不想将这些字符串硬编码到我的程序中。

有没有办法让 Elixir 告诉我我当前的时区是“MST7MDT”,这样我就可以使用 Calendar.DateTime 函数来正确格式化我的 DateTimes?

【问题讨论】:

    标签: erlang elixir


    【解决方案1】:

    我认为实际上没有官方方法如何在 erlang 中将本地时区信息作为字符串获取,但您可以尝试qdate library

    【讨论】:

      【解决方案2】:

      我认为最好的方法是在向最终用户显示日期时只使用:calendar.universal_time_to_local_time

      但是如果你真的需要获取系统的当前时区,并且它是一个类 Unix 系统,你总是可以这样做:

      def get_timezone() do
        {zone, result} = System.cmd("date", ["+%Z"])
        if result == 0, do: String.trim(zone)
      end
      

      不是最优雅的解决方案,但有效。似乎没有任何与 java.util.TimeZone.getDefault() 等效的东西可用。

      【讨论】:

      • 谢谢!我可以让这两种方法都适用于我的系统。
      猜你喜欢
      • 2019-04-21
      • 2015-04-20
      • 2020-09-30
      • 2017-06-13
      • 1970-01-01
      • 2016-05-18
      • 2019-04-25
      • 2012-10-24
      • 1970-01-01
      相关资源
      最近更新 更多