如何在Elixir中将YYYY-MM-DD HH:mm:SS字符串转换为UTC格式?
Elixir时间格式转换解决方案
错误原因
你调用的DateTime.from_iso8601!/1仅支持标准ISO8601格式(如2022-04-14T15:30:00),而你的输入是空格分隔的YYYY-MM-DD HH:mm:SS,不符合该函数的格式要求,因此触发报错。
正确实现方式
根据输入时间的时区属性,提供两种可行方案:
方案1:输入时间本身为UTC
直接将空格替换为T并追加Z标记,再用DateTime.from_iso8601!/1解析:
"2022-04-14 15:30:00" |> String.replace(" ", "T") |> Kernel.<>("Z") |> DateTime.from_iso8601!()
执行后会得到~U[2022-04-14 15:30:00Z],输出字符串即为2022-04-14T15:30:00Z。
方案2:输入时间为本地时区
先通过NaiveDateTime.from_iso8601!/1解析无时区的时间,再关联本地时区后转换为UTC:
# 依赖系统默认时区 "2022-04-14 15:30:00" |> NaiveDateTime.from_iso8601!() |> DateTime.from_naive!(Calendar.get_time_zone()) |> DateTime.to_utc()
如果需要更灵活的时区处理,可以引入Timex库来指定时区:
# 需要先添加Timex依赖到mix.exs "2022-04-14 15:30:00" |> NaiveDateTime.from_iso8601!() |> DateTime.from_naive!(Timex.local_zone()) |> DateTime.to_utc()
内容的提问来源于stack exchange,提问作者Alkari
相关产品推荐
相关产品推荐

