# `Timex.Format.Duration.Formatter`
[🔗](https://github.com/bitwalker/timex/blob/4.0.0/lib/format/duration/formatter.ex#L1)

This module defines the behaviour for custom Time formatters

# `format`

```elixir
@callback format(Timex.Duration.t()) :: String.t() | {:error, term()}
```

# `lformat`

```elixir
@callback lformat(Timex.Duration.t(), locale :: String.t()) ::
  String.t() | {:error, term()}
```

# `format`

```elixir
@spec format(Timex.Duration.t()) :: String.t() | {:error, term()}
```

Formats a Duration as a string, using the provided
formatter. If a formatter is not provided, the formatter used is
`Timex.Format.Duration.Formatters.Default`. As a handy shortcut, you can reference
the other built-in formatter (Humanized) via the :humanized atom as shown below.

# Examples

    iex> d = Timex.Duration.from_erl({1435, 180354, 590264})
    ...> Elixir.Timex.Format.Duration.Formatter.format(d)
    "P45Y6M5DT21H12M34.590264S"

# `format`

```elixir
@spec format(Timex.Duration.t(), atom()) :: String.t() | {:error, term()}
```

Same as format/1, but takes a formatter name as an argument

## Examples

    iex> d = Timex.Duration.from_erl({1435, 180354, 590264})
    ...> Elixir.Timex.Format.Duration.Formatter.format(d, :humanized)
    "45 years, 6 months, 5 days, 21 hours, 12 minutes, 34 seconds, 590.264 milliseconds"

# `lformat`

```elixir
@spec lformat(Timex.Duration.t(), String.t()) :: String.t() | {:error, term()}
```

Same as format/1, but takes a locale name as an argument, and translates the format string,
if the locale has translations.

# `lformat`

```elixir
@spec lformat(Timex.Duration.t(), String.t(), atom()) :: String.t() | {:error, term()}
```

Same as lformat/2, but takes a formatter as an argument

---

*Consult [api-reference.md](api-reference.md) for complete listing*
