Ecto.DateTime如何处理时区?

时间:2016-08-24 08:07:53

标签: datetime elixir ecto

我在Ecto变更集中的某些记录上设置了时间戳(例如,当记录进入不同的状态,发送消息时等等)

现在我有两种方法可以做到这一点。使用当地时间或UTC。例如:

def changeset_utc(struct, params \\ %{}) do
  struct
  |> cast(params, [:from, :to, :sent_at, :subject, :content])
  |> set_sent_at_utc
end

def changeset_local(struct, params \\ %{}) do
  struct
  |> cast(params, [:from, :to, :sent_at, :subject, :content])
  |> set_sent_at_local
end

defp set_sent_at_local(changeset) do
  datetime = :calendar.universal_time() |> :calendar.universal_time_to_local_time() |> Ecto.DateTime.from_erl
  put_change(changeset, :sent_at, datetime)
end

defp set_sent_at_utc(changeset) do
  datetime = :calendar.universal_time() |> Ecto.DateTime.from_erl
  put_change(changeset, :sent_at, datetime)
end

因此,根据我的理解,最好以UTC格式存储时间。如果我将时间存储为当地时间,一旦我必须处理不同的时区,事情就会变得非常混乱。

但我想知道:有没有更好的方法来解决这个问题?有没有办法用时区存储DateTime?

0 个答案:

没有答案