Packages
timex
3.7.3
3.7.13
3.7.12
3.7.11
3.7.9
3.7.8
3.7.7
3.7.6
3.7.5
3.7.3
3.7.2
3.7.1
3.7.0
3.6.4
3.6.3
3.6.2
retired
3.6.1
3.6.0
3.5.0
3.4.2
3.4.1
3.3.0
3.2.2
3.2.1
3.2.0
3.1.25
retired
3.1.24
3.1.23
3.1.22
3.1.21
3.1.20
3.1.19
3.1.18
3.1.17
3.1.16
3.1.15
3.1.13
3.1.12
3.1.11
3.1.10
3.1.9
3.1.8
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.2.1
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.0
1.0.2
1.0.1
1.0.0
1.0.0-rc4
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
1.0.0-pre
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.2
0.18.1
0.18.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.0
0.10.2
0.10.1
0.10.0
0.9.0
0.8.0
0.7.1
0.6.0
0.5.0
0.4.8
0.4.7
0.4.6
Timex is a rich, comprehensive Date/Time library for Elixir projects, with full timezone support via the :tzdata package. If you need to manipulate dates, times, datetimes, timestamps, etc., then Timex is for you!
Current section
Files
Jump to
Current section
Files
lib/parse/datetime/tokenizers/directive.ex
defmodule Timex.Parse.DateTime.Tokenizers.Directive do
@moduledoc false
alias Timex.Parse.DateTime.Parsers
alias Timex.Parse.DateTime.Tokenizers.Directive
defstruct type: :literal,
value: nil,
modifiers: [],
flags: [],
width: [min: -1, max: nil],
parser: nil,
weight: 0
@type t :: %__MODULE__{}
@doc """
Gets a parsing directive for the given token name, where the token name
is an atom.
## Examples
iex> alias Timex.Parsers.Directive
...> %Directive{type: type, flags: flags} = Directive.get(:year4, "YYYY", padding: :zeros)
...> {type, flags}
{:year4, [padding: :zeros]}
"""
@spec get(atom, String.t(), [{atom, term}] | []) :: Directive.t()
def get(type, directive, opts \\ []) do
min_width = Keyword.get(opts, :min_width, -1)
width = Keyword.get(opts, :width, min: min_width, max: nil)
flags = Keyword.merge(Keyword.get(opts, :flags, []), width)
modifiers = Keyword.get(opts, :modifiers, [])
get(type, directive, flags, modifiers, width)
end
@simple_types [
:year4,
:year2,
:century,
:hour24,
:hour12,
:zname,
:zoffs,
:zoffs_colon,
:zoffs_sec,
:iso_date,
:iso_time,
:iso_week,
:iso_weekday,
:iso_ordinal,
:ansic,
:unix,
:kitchen,
:slashed,
:asn1_utc_time,
:asn1_generalized_time,
:strftime_iso_clock,
:strftime_iso_clock_full,
:strftime_kitchen,
:strftime_iso_shortdate
]
@mapped_types [
iso_year4: :year4,
iso_year2: :year2,
month: :month2,
mshort: :month_short,
mfull: :month_full,
day: :day_of_month,
oday: :day_of_year,
iso_weeknum: :week_of_year_iso,
week_mon: :week_of_year_mon,
week_sun: :week_of_year_sun,
wday_mon: :weekday,
wday_sun: :weekday,
wdshort: :weekday_short,
wdfull: :weekday_full,
min: :minute,
sec: :second,
sec_fractional: :second_fractional,
sec_epoch: :seconds_epoch,
us: :microseconds,
ms: :milliseconds,
am: :ampm,
AM: :ampm,
zabbr: :zname,
iso_8601_extended: :iso8601_extended,
iso_8601_basic: :iso8601_basic,
rfc_822: :rfc822,
rfc_1123: :rfc1123,
rfc_3339: :rfc3339,
strftime_iso_date: :iso_date
]
@mapped_zulu_types [
iso_8601_extended_z: :iso8601_extended,
iso_8601_basic_z: :iso8601_basic,
rfc_822z: :rfc822,
rfc_1123z: :rfc1123,
rfc_3339z: :rfc3339,
asn1_generalized_time_z: :asn1_generalized_time
]
for type <- @simple_types do
def get(unquote(type), directive, flags, mods, width) do
%Directive{
type: unquote(type),
value: directive,
flags: flags,
modifiers: mods,
width: width,
parser: apply(Parsers, unquote(type), [flags])
}
end
end
for {type, parser_fun} <- @mapped_types do
def get(unquote(type), directive, flags, mods, width) do
%Directive{
type: unquote(type),
value: directive,
flags: flags,
modifiers: mods,
width: width,
parser: apply(Parsers, unquote(parser_fun), [flags])
}
end
end
for {type, parser_fun} <- @mapped_zulu_types do
def get(unquote(type), directive, flags, mods, width) do
%Directive{
type: unquote(type),
value: directive,
flags: flags,
modifiers: mods,
width: width,
parser: apply(Parsers, unquote(parser_fun), [[{:zulu, true} | flags]])
}
end
end
def get(:asn1_generalized_time_tz, directive, flags, mods, width) do
%Directive{
type: :asn1_generalized_time_tz,
value: directive,
flags: flags,
modifiers: mods,
width: width,
parser: Parsers.asn1_generalized_time([{:zoffs, true} | flags])
}
end
# Catch-all
def get(type, _directive, _flags, _mods, _width),
do: {:error, "Unrecognized directive type: #{type}."}
end