我有一个原始的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}
答案 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