Zoi.ISO (Zoi v0.6.4)
View SourceThis module defines schemas for ISO time, date, and datetime formats, along with transformations to convert them into Elixir's native types.
It includes built-in transformations to convert ISO time, date, and datetime
strings into %Time{}
, %Date{}
, and %DateTime{}
structs.
Summary
Basic Types
Defines a date type schema.
Defines a datetime type schema.
Defines a naive datetime type schema.
Defines a time type schema.
Transforms
Converts Zoi.ISO.date()
to %Date{}
struct.
Converts Zoi.ISO.datetime()
to %DateTime{}
struct.
Converts Zoi.ISO.naive_datetime()
to %NaiveDateTime{}
struct.
Converts Zoi.ISO.time()
to %Time{}
struct.
Functions
Basic Types
Defines a date type schema.
Example
iex> schema = Zoi.ISO.date()
iex> Zoi.parse(schema, "2025-08-07")
{:ok, "2025-08-07"}
iex> Zoi.parse(schema, "2025-02-30")
{:error, [%Zoi.Error{message: "invalid type: must be an ISO date"}]}
Defines a datetime type schema.
Example
iex> schema = Zoi.ISO.datetime()
iex> Zoi.parse(schema, "2025-08-07T10:04:22+03:00")
{:ok, "2025-08-07T10:04:22+03:00"}
iex> schema = Zoi.ISO.datetime()
iex> Zoi.parse(schema, 1754646043)
{:error, [%Zoi.Error{message: "invalid type: must be an ISO datetime"}]}
Defines a naive datetime type schema.
Example
iex> schema = Zoi.ISO.naive_datetime()
iex> Zoi.parse(schema, "2025-08-07T10:04:22")
{:ok, "2025-08-07T10:04:22"}
iex> schema = Zoi.ISO.naive_datetime()
iex> Zoi.parse(schema, 1754646043)
{:error, [%Zoi.Error{message: "invalid type: must be an ISO naive datetime"}]}
Defines a time type schema.
Example
iex> schema = Zoi.ISO.time()
iex> Zoi.parse(schema, "12:34:56")
{:ok, "12:34:56"}
iex> Zoi.parse(schema, "25:00:00")
{:error, [%Zoi.Error{message: "invalid type: must be an ISO time"}]}
Transforms
Converts Zoi.ISO.date()
to %Date{}
struct.
Example
iex> schema = Zoi.ISO.date() |> Zoi.ISO.to_date_struct()
iex> Zoi.parse(schema, "2025-08-07")
{:ok, ~D[2025-08-07]}
Converts Zoi.ISO.datetime()
to %DateTime{}
struct.
Example
iex> schema = Zoi.ISO.datetime() |> Zoi.ISO.to_datetime_struct()
iex> Zoi.parse(schema, "2025-08-07T10:04:22+03:00")
{:ok, ~U[2025-08-07 07:04:22Z]}
Converts Zoi.ISO.naive_datetime()
to %NaiveDateTime{}
struct.
Example
iex> schema = Zoi.ISO.naive_datetime() |> Zoi.ISO.to_naive_datetime_struct()
iex> Zoi.parse(schema, "2025-08-07T10:04:22")
{:ok, ~N[2025-08-07 10:04:22]}
Converts Zoi.ISO.time()
to %Time{}
struct.
Example
iex> schema = Zoi.ISO.time() |> Zoi.ISO.to_time_struct()
iex> Zoi.parse(schema, "12:34:56")
{:ok, ~T[12:34:56]}