格式化Elixir中的时间

Gor*_*nor 13 elixir phoenix-framework

我是Elixir的新手,尝试将一个Rails API作为学习项目移植到Phoenix.

我有一个Postgres时间字段,我已添加到Ecto方案中:

field :start_time, Ecto.Time
Run Code Online (Sandbox Code Playgroud)

问题:我想输出一个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
Run Code Online (Sandbox Code Playgroud)

对于我认为已经具有更简洁和标准的实现的东西来说,这似乎是一个荒谬而荒谬的长代码; 另外它有输出2:0pm而不是下午2:00的问题 - 用尾随零格式化0也是我正在处理的长而复杂的代码片段 - 此时我开始觉得事情正在发生偏离轨道.

建议赞赏!

Paw*_*rok 10

您可以使用格式化工具,timex因为您已经在使用它,但首先您需要将其更改Ecto.TimeTimex.DateTime可以使用这些格式设置的格式.

use Timex

{{0, 0, 0}, Ecto.Time.to_erl(time)}
|> Timex.Date.from
|> DateFormat.format!("{h12}:{0m} {am}")
Run Code Online (Sandbox Code Playgroud)


sev*_*cat 6

你正在使用Timex,但不是它的format!方法,它允许简单的时间和日期格式.

https://david.padilla.cc/posts/19-date-formatting-in-phoenix-elixir是一篇关于使用Timex的好文章.

看起来您可以执行以下操作:

Timex.DateFormat.format!(time, "%H:%M%P", :strftime)
Run Code Online (Sandbox Code Playgroud)

有关格式化选项的完整列表,请参阅https://github.com/bitwalker/timex/blob/master/lib/format/datetime/formatters/strftime.ex.


Fab*_*755 5

我遇到了同样的问题并且使用了类似的库Timex.这是我如何处理日期的方式.我不知道是否有更好的工作案例.

  • 用于解析的日历和一些功能.
  • Calecto使用 CalendarEcto

在这种情况下,您可以使用Calendar.Strftime格式化日期/时间字符串.

我希望它有所帮助.