【发布时间】:2019-03-06 18:12:31
【问题描述】:
所以我刚开始使用 Elixir,发现当前的 master 添加了对 ~U[2015-01-13 13:00:07Z] sigil 的支持以创建/解析 UTC 日期。
代码如下:
defmodule MySigils do
defmacro sigil_U(datetime_string, modifiers)
defmacro sigil_U({:<<>>, _, [string]}, []) do
Macro.escape(datetime_from_utc_iso8601!(string))
end
defp datetime_from_utc_iso8601!(string) do
case DateTime.from_iso8601(string) do
{:ok, utc_datetime, 0} ->
utc_datetime
{:ok, _datetime, _offset} ->
raise ArgumentError,
"cannot parse #{inspect(string)} as UTC datetime, reason: :non_utc_offset"
{:error, reason} ->
raise ArgumentError,
"cannot parse #{inspect(string)} as UTC datetime, reason: #{inspect(reason)}"
end
end
end
在我的代码中,我尝试将其与变量 timestamp 一起使用
timestamp = Map.get(item, "timestamp")
~U[timestamp]
** (ArgumentError) cannot parse "timestamp" as UTC datetime, reason: :invalid_format
但timestamp 被解释为原样,而不是之前的匹配。
有没有办法让它工作?我需要引用/取消引用某些内容吗?除了直接使用DateTime.from_iso8601/1。
【问题讨论】: