如何将Date与Time类型转换合并为DateTime类型?
合并Date和Time为UTC DateTime的简洁方法
嘿,我有几个更简洁的原生Elixir方案,不用依赖Timex就能轻松把你的Date和Time合并成目标UTC DateTime:
方法一:使用原生DateTime.new!/3
因为你已经确认输入的日期和时间都是有效的,直接用带!的版本最直接:
iex> DateTime.new!(date, time, "Etc/UTC") #DateTime<2018-01-01 00:00:01Z>
这个方法直接将Date和Time对象结合,第三个参数指定时区为UTC("Etc/UTC"是标准的UTC时区标识),返回的结果正好是你需要的带Z标记的UTC DateTime。如果需要处理可能的无效输入,换成不带!的DateTime.new/3即可,它会返回:ok或:error的元组用于错误处理。
方法二:拼接ISO字符串后解析
如果你偏好字符串操作的方式,也可以把日期和时间的字符串形式拼接起来,加上UTC标识Z后解析:
iex> "#{date} #{time}Z" |> DateTime.from_iso8601!() #DateTime<2018-01-01 00:00:01Z>
这种方式可读性很强,一眼就能理解是把日期、时间和UTC标识组合后转换为DateTime对象。同样,若要处理无效输入,使用DateTime.from_iso8601/1即可。
这两种方案都比你当前用Timex的方式更轻量(无需额外依赖),也更贴合Elixir的原生用法,代码简洁易读。
内容的提问来源于stack exchange,提问作者Sam Houston
相关产品推荐
相关产品推荐

