我需要将包含有效 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
.请参阅以下链接:使用 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 Parsing和 Formatting文档。
关于datetime - 如何在 Elixir 中将字符串转换为 Ecto.DateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40444970/