Elixir将datetime转换为字符串

时间:2017-03-21 22:34:05

标签: elixir ecto timex

我有一个原始的sql查询,它返回一个datetime字段,我想返回一个带有这些结果的json。

如果我把返回值我抱怨:

(Poison.EncodeError) unable to encode value: {{2017, 3, 21}, {0, 0, 0, 0}}

如果我尝试使用Timex将其转换为字符串:

Timex.format!(Ecto.DateTime.from_erl(datetime_field), "%Y-%m-%d %H:%M:%S", :strftime)

我明白了:

** (FunctionClauseError) no function clause matching in Ecto.DateTime.from_erl/1

如果我跳过from_erl部分:

Timex.format!(datetime_field, "%Y-%m-%d %H:%M:%S", :strftime)

我明白了:

** (Poison.EncodeError) unable to encode value: {:error, :invalid_date}

2 个答案:

答案 0 :(得分:5)

要获得标准datetime = {{2017, 3, 21}, {0, 0, 0, 0}} {{year, month, day}, {hours, minutes, seconds, _}} = datetime datetime = {{year, month, day}, {hours, minutes, seconds}} Poison.encode! Ecto.DateTime.from_erl(datetime) #=> "\"2017-03-21T00:00:00\"" 日期时间值,需要从第二个元组中删除第四个值(微秒):

function add (a,b) {
  return a + b;
}

add(1,2);

答案 1 :(得分:1)

根据Ecto 3.0更改日志,Ecto.DateTime不再存在。如果您没有可用的时区信息,则可以使用NaiveDateTime.from_erl()代替Ecto.DateTime.from_erl()

如果您需要除基本的iso8601或to_string之外的其他格式,则需要查看https://hexdocs.pm/timex/Timex.html#format/2