如何将字符串转换为Elixir中的Ecto.DateTime?

Lau*_*ent 4 datetime elixir ecto phoenix-framework

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

我知道有些像Timex这样的库我还没有检查过.Elixir中是否有任何简单易用的解决方案?

She*_*yar 8

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

Sat Aug 04 11:48:27 +0000 2012
Run Code Online (Sandbox Code Playgroud)

你当然可以自己编写一个解析器,但它既不简短也不简单.您必须拆分字符串,获取日期和时间参数的值,将月份字符串转换为月份整数,解析时区,用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>
Run Code Online (Sandbox Code Playgroud)

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

  • Twitter发送的格式实际上非常奇怪,你不是第一个感到惊讶的,感谢你的输入:) (3认同)