格式化Elixir中的时间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了格式化Elixir中的时间相关的知识,希望对你有一定的参考价值。
我是Elixir的新手,尝试将一个Rails API作为学习项目移植到Phoenix。
我有一个Postgres时间字段,我已添加到Ecto方案中:
field :start_time, Ecto.Time
问题:我想输出一个12小时格式化版本的时间,如16:30作为字符串:例如,下午4:30。我一直无法找到一种简单/标准的方法来做到这一点。
这是我最接近解决方案的:
def format_time(time) do
{:ok, {hours,minutes,y, z}} = Ecto.Time.dump(time)
{hour, ampm} = Timex.Time.to_12hour_clock(hours)
"#{hour}:#{minutes}#{ampm}"
end
对于我认为已经具有更简洁和标准的实现的东西来说,这似乎是一个荒谬而荒谬的长代码;另外它有输出2:0pm而不是下午2:00的问题 - 用尾随零格式化0也是我正在处理的冗长而复杂的代码片段 - 此时我开始感觉事情正在发生偏离轨道。
建议赞赏!
您可以使用timex
的格式化工具,因为您已经使用过,但首先您需要将Ecto.Time
更改为可以使用这些格式化的Timex.DateTime
。
use Timex
{{0, 0, 0}, Ecto.Time.to_erl(time)}
|> Timex.Date.from
|> DateFormat.format!("{h12}:{0m} {am}")
你正在使用Timex,但不是它的format!
方法,它允许简单的时间和日期格式。
https://david.padilla.cc/posts/19-date-formatting-in-phoenix-elixir是一篇关于使用Timex的好文章。
看起来您可以执行以下操作:
Timex.DateFormat.format!(time, "%H:%M%P", :strftime)
有关格式选项的完整列表,请参阅https://github.com/bitwalker/timex/blob/master/lib/format/datetime/formatters/strftime.ex。
我有同样的问题,使用像Timex
这样的库。这是我如何处理日期的方式。我不知道是否有更好的工作案例。
在这种情况下,您可以使用Calendar.Strftime格式化日期/时间字符串。
我希望它有所帮助。
一个简单的方法是使用strftime
中提供的Calendar
字符串格式。使用Calecto
你甚至可以使用基本类型,如Ecto.Time
或Ecto.DateTime
。这可以直接通过管道传输到Calendar
的格式,如下所示:
@ecto_struct.some_time |> Calendar.Strftime.strftime! "%I:%M%P"
将导致:
"02:30pm"
您所要做的就是添加Calecto
作为依赖:
defp deps do
[ {:calecto, "~> 0.4.1"}, ]
end
这是我到达的可行解决方案,它是Pawel,Obrok和sevenseascat的答案的组合 - 增加了将分钟纳入00
格式。
def formatted_time(time) do
{{0, 0, 0}, Ecto.Time.to_erl(time)} |>
Timex.Date.from |>
DateFormat.format!("%I:%M%P", :strftime)
end
以上是关于格式化Elixir中的时间的主要内容,如果未能解决你的问题,请参考以下文章