【问题标题】:Elixir converting datetime to stringElixir 将日期时间转换为字符串
【发布时间】:2017-03-21 22:34:04
【问题描述】:

我有一个原始 sql 查询,它返回一个日期时间字段,我想返回一个带有这些结果的 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}

【问题讨论】:

    标签: elixir ecto timex


    【解决方案1】:

    要获得标准的erlang datetime 值需要从第二个元组中删除第四个值(微秒):

    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\""
    

    【讨论】:

    • 不会很快找到这个
    【解决方案2】:

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

    如果除了基本的 iso8601 或 to_string 之外,您还需要更多格式,您可以查看https://hexdocs.pm/timex/Timex.html#format/2

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 1970-01-01
      • 2022-08-18
      • 2017-08-31
      相关资源
      最近更新 更多