You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:45:07