datetime - 如何在 Elixir 中将字符串转换为 Ecto.DateTime?

标签 datetime elixir phoenix-framework ecto

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

我知道有诸如 之类的库。天美士 我还没有检查。 Elixir 中是否已经内置了任何简单的工作解决方案?

最佳答案

没有内置解决方案 在 Elixir 或 Erlang 中进行解析 DateTime此格式的值:

Sat Aug 04 11:48:27 +0000 2012

您当然可以自己编写解析器,但它既不会简短也不会简单。您必须拆分字符串,获取日期和时间参数的值,将月份字符串转换为月份整数,解析时区,以 Elixir/Erlang DateTime 格式表示完整值,然后最终将其转换为 Ecto.DateTime .请参阅以下链接:
  • Elixir Tips - Date Parsing
  • Erlang - How Can I Parse RFC1123 Dates Into An Erlang Term?
  • Convert timestamp to datetime in erlang


  • 使用 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文档。

    关于datetime - 如何在 Elixir 中将字符串转换为 Ecto.DateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40444970/

    相关文章:

    elixir - 在 Elixir(非 Phoenix)应用程序中渲染部分 EEx 模板

    elixir - 如何使用 Elixir 中的苦艾酒在查询中的嵌套项目上使用参数?

    linux - 人类可读形式的时间戳

    php - 平均日期间隔 php

    php - 解析日期字符串

    c# - 当我在 C# 中使用今天的日期时,为什么时间会变成 0000

    Elixir - 将 gzip 压缩和 base64 编码的 API 响应转换为字符串

    gzip - 如何从 Elixir 代码写入 gzip 文件

    Elixir/Plug/Phoenix : Calling halt doesn't stop downstream plugs from getting invoked during test

    elixir - Assert conn 在 phoenix 中被重定向