如何推断Elixir或Erlang的当前时区?

时间:2016-09-15 23:13:51

标签: erlang elixir

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

:calendar.local_time

我可以使用日历包来获取Elixir中UTC的当前时间:

Calendar.DateTime.now_utc()

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

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

2 个答案:

答案 0 :(得分: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()可用的东西。

答案 1 :(得分:0)

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