View Source Cldr.DateTime.Format.Compiler (Cldr Dates & Times v2.20.3)

Tokenizes and parses Date, Time and DateTime format strings.

During compilation, each of the date, time and datetime format strings defined in CLDR are compiled into a list of function bodies that are then grafted onto the function head format/3 in a backend module. As a result these compiled formats execute with good performance.

For formats not defined in CLDR (ie a user defined format), the tokenizing and parsing is performed, then list of function bodies is created and then format/3 recurses over the list, invoking each function and collecting the results. This process is significantly slower than that of the precompiled formats.

User defined formats can also be precompiled by configuring them under the key :precompile_datetime_formats. For example:

config :ex_cldr,
  precompile_datetime_formats: ["yy/dd", "hhh:mmm:sss"]

Summary

Functions

Parse a date, time or datetime format string.

Tokenize a date, time or datetime format string.

Functions

Link to this function

compile(format_string, backend, context)

View Source
@spec compile(String.t(), module(), module()) ::
  {:ok, Macro.t()} | {:error, String.t()}

Parse a date, time or datetime format string.

Arguments

  • format_string is a string defining how a date/time/datetime is to be formatted. See Cldr.DateTime.Formatter for the list of supported format symbols.

Returns

Returns a list of function bodies which are grafted onto a function head in Cldr.DateTime.Formatter at compile time to produce a series of functions that process a given format string efficiently.

Tokenize a date, time or datetime format string.

This function is designed to produce output that is fed into Cldr.DateTime.Format.Compiler.compile/3.

Arguments

  • format_string is a date, datetime or time format string.

Returns

A list of 3-tuples which represent the tokens of the format definition.

Example

iex> Cldr.DateTime.Format.Compiler.tokenize("yyyy/MM/dd")
{:ok,
 [{:year, 1, 4}, {:literal, 1, "/"}, {:month, 1, 2}, {:literal, 1, "/"},
  {:day_of_month, 1, 2}], 1}