【问题标题】:How to convert a String into an Ecto.DateTime in Elixir?如何在 Elixir 中将字符串转换为 Ecto.DateTime?
【发布时间】:2017-03-19 14:29:15
【问题描述】:

我需要将包含有效 UTC 时间的字符串转换为 Ecto.DateTime 字符串,稍后我将以正确的格式将其插入到我的数据库中。我曾尝试使用Ecto.DateTime.cast(date) 方法,但它似乎不起作用。字符串是Sat Aug 04 11:48:27 +0000 2012,来自 Twitter API。

我知道我还没有检查过诸如 Timex 之类的库。 Elixir 中是否已经内置了任何简单可行的解决方案?

【问题讨论】:

    标签: datetime elixir phoenix-framework ecto


    【解决方案1】:

    Elixir 或 Erlang 中没有内置解决方案来解析这种格式的 DateTime 值:

    Sat Aug 04 11:48:27 +0000 2012
    

    您当然可以自己编写解析器,但它既不短也不简单。您必须拆分字符串,获取日期和时间参数的值,将月份字符串转换为月份整数,解析时区,以 Elixir/Erlang DateTime 格式表示完整值,然后最终将其转换为 Ecto.DateTime。请参阅以下链接:


    这里最好使用Timex

    这是一个编写良好的库,可让您远离日期/时间内部运作的混乱。使用Timex,您可以像这样解析字符串:

    "Sat Aug 04 11:48:27 +0000 2012"
    |> Timex.parse!("%a %b %d %T %z %Y", :strftime)
    |> Ecto.DateTime.cast!
    
    # => #Ecto.DateTime<2012-08-04 11:48:27>
    

    注意:Timex 内置了对许多常见 DateTime 格式的支持,我发现 Twitter 发送的 DateTime 格式不受支持很奇怪 - 所以我为你写了一个.也许仔细检查你的字符串是否正确?另请查看 Timex ParsingFormatting 文档。

    【讨论】:

    • Twitter 发送的格式实际上看起来很奇怪,您不是第一个感到惊讶的人,感谢您的输入 :)
    猜你喜欢
    • 2020-06-29
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2015-11-06
    相关资源
    最近更新 更多