我想找到“utc now”和Ecto.DateTime
类型变量之间的分钟时差。最简单的方法是什么?我应该在unix时间内转换它们并减去而不是进行模式匹配并首先比较年,月,日和小时,并且仅在实际减去分钟后才进行比较吗?我不打算使用任何第三方依赖项。
答案 0 :(得分:1)
JIC:Ecto.DateTime
is a struct并且它有一个Ecto.DateTime.from_erl/1
帮助器(以及from_unix!
和其他一些帮助器。)它还负责使用Ecto.DateTime.utc/1
生成“utc now”
Elixir DateTime
反过来to_unix/2
,因此可能会:
dt1, dt2 = [ecto_time, Ecto.DateTime.utc]
|> Enum.map(&Ecto.DateTime.to_erl/1)
|> Enum.map(&NaiveDateTime.from_erl!/1)
|> Enum.map(&DateTime.from_naive!(&1, "Etc/UTC"))
|> Enum.map(&DateTime.to_unix(&1))
mins = (dt1 - dt2) / 60
答案 1 :(得分:1)
您可以使用UTC时区将Ecto.DateTime
转换为DateTime
,然后比较他们的to_unix
:
iex(1)> now = DateTime.utc_now |> DateTime.to_unix
1486544161
iex(2)> now2 = Ecto.DateTime.utc |> Ecto.DateTime.to_erl |> NaiveDateTime.from_erl! |> DateTime.from_naive!("Etc/UTC") |> DateTime.to_unix
1486544206
iex(3)> (now2 - now) / 60
0.75
模式匹配不是一个好主意,因为您必须在添加/减去后处理年/月/日/小时/分钟/秒溢出的每个案例。
答案 2 :(得分:0)