Mur*_*ago 6 datetime elixir datetime-conversion phoenix-framework
我有一个NaiveDateTime需要添加时区数据的文件。例如,如果我有一个naive_date像这样的值~N[2015-10-03 12:00:00.000000]并且我想将它设置为“America/Los_Angeles”时区,那么在 Elixir 中怎么可能?
使用 Timex 软件包,您可以:
更新:更好的解决方案
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>
Run Code Online (Sandbox Code Playgroud)
旧解决方案
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")
Run Code Online (Sandbox Code Playgroud)
根据NaiveDateTime文档:
我们称它们为“天真”,因为这种日期时间表示没有时区。
这意味着您不能将时区数据添加到NaiveDateTimeobject。
但是你可以转换NaiveDateTime为DateTime可以与保持时间区域数据DateTime.from_naive!/2:
DateTime.from_naive!(~N[2015-10-03 12:00:00.000000], "Etc/UTC")
Run Code Online (Sandbox Code Playgroud)