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

时间:2016-11-06 01:00:08

标签: datetime elixir phoenix-framework ecto

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

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

1 个答案:

答案 0 :(得分:8)

在Elixir或Erlang中

没有内置解决方案,用于解析此格式的DateTime值:

Sat Aug 04 11:48:27 +0000 2012

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

使用Timex是此处的最佳选择。

它是一个写得很好的图书馆,可以让你远离日期/时间内部运作的混乱。使用Ecto.DateTime,您可以像这样解析字符串:

Timex

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