Elixir将时区数据添加到原始日期时间

时间:2018-07-30 18:48:09

标签: datetime elixir phoenix-framework datetime-conversion

我有一个NaiveDateTime,我需要添加时区数据。例如,如果我有一个naive_date之类的~N[2015-10-03 12:00:00.000000]值,并且要将其设置为“ America / Los_Angeles”时区,那么在Elixir中怎么可能?

2 个答案:

答案 0 :(得分:2)

对Ronan的评论,目前仅支持“ Etc / UTC”作为时区。

更新:更好的解决方案

iex> use timex

iex> naive_date = ~N[2015-10-03 12:00:00.000000]

iex> Timex.to_datetime(naive_date, "America/Los_Angeles")
#DateTime<2015-10-03 12:00:00-07:00 PDT America/Los_Angeles>

旧解决方案

use timex

utc_time = DateTime.from_naive!(~N[2015-10-03 12:00:00.000000], "Etc/UTC")

tz_offset =
  Timex.timezone("America/Los_Angeles", utc_time)
  |> Timex.Timezone.total_offset()

Timex.shift(utc_time, seconds: -tz_offset)
  |> Timezone.convert("America/Los_Angeles")

答案 1 :(得分:1)

根据NaiveDateTime文档:

  

我们称它们为“天真”,因为此日期时间表示没有时区。

这意味着您不能将时区数据添加到NaiveDateTime对象


但是您可以将NaiveDateTime转换为DateTime ,以便可以使用DateTime.from_naive!/2保存时区数据:

DateTime.from_naive!(~N[2015-10-03 12:00:00.000000], "Etc/UTC")