如何在 Elixir 中将字符串转换为 Ecto.DateTime?
How to convert a String into an Ecto.DateTime in Elixir?
我需要将包含有效 UTC 时间的字符串转换为 Ecto.DateTime
时间,稍后我将以正确的格式将其插入到我的数据库中。我试过使用 Ecto.DateTime.cast(date)
方法,但它似乎不起作用。字符串是 Sat Aug 04 11:48:27 +0000 2012
并且来自 Twitter API.
我知道有像 Timex 这样的库我还没有检查过。 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是最好的选择。
这是一个写得很好的库,可以让你远离 Date/Time 内部工作的混乱。使用 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 and Formatting 文档。
我需要将包含有效 UTC 时间的字符串转换为 Ecto.DateTime
时间,稍后我将以正确的格式将其插入到我的数据库中。我试过使用 Ecto.DateTime.cast(date)
方法,但它似乎不起作用。字符串是 Sat Aug 04 11:48:27 +0000 2012
并且来自 Twitter API.
我知道有像 Timex 这样的库我还没有检查过。 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是最好的选择。
这是一个写得很好的库,可以让你远离 Date/Time 内部工作的混乱。使用 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 and Formatting 文档。