所以我只是从Elixir开始,看到当前的master
添加了对~U[2015-01-13 13:00:07Z]
标记的支持,以创建/解析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
。
答案 0 :(得分:1)