Timex parsing format 22-AUG-18

I’m having hard time parsing a date format: 22-AUG-18 while using {:timex, "~> 3.6"} , solution I have tried:

Timex.parse(“22-AUG-18”, “{D}-{WDshort}-{YYYY}”)
{:error, “Expected weekday abbreviation at line 1, column 4.”}
Timex.parse(“22-AUG-18”, “{D}-{Mshort}-{YY}”)
{:error, “Expected month abbreviation at line 1, column 7.”}
Timex.parse!(“22-AUG-18”, “%d-%^b-%y”)
Timex.parse!(“22-AUG-18”, “%d-%b-%y”)

Thanks in advance

1 Like

I’m pretty sure Mshort only parses titlized months, so Jan, Feb, etc…, not things like JAN, FEB, etc…

You can either preprocess it to map the caps to titlecased months, or you can make a new timex tokanizer parser thing to pass in to parse to parse it as capped (or lowercase it all to compare or whatever). :slight_smile:

That’s a really weird format though, without your format string I wouldn’t know if that’s August 22, 2018 or August 18, 2022, lol.

1 Like
|> String.split("-")
|> Enum.map(&String.capitalize(&1)) 
|> Enum.join("-") 
|> Timex.parse("{D}-{Mshort}-{YY}")

@OvermindDL1 great to have you back!


As you went that far with manual parsing, then I would finish it manually instead of using Timex. Especially if you do not use any other Timex features


Yep, that’s exactly the mapping before hand, quite easy. ^.^

Baby is so busy! Trying to be a toddler already!

Yeah it would be pretty trivial to finish it off by piping into a case and matching on the elements and parsing the strings to integers and such with a map mapping from months to a month integer.


You can also use datix and tox:

iex> months = [ "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" ]
iex> format = "%d-%b-%y"
iex> parse = fn(date) ->
...>   date
...>   |> Datix.Date.parse!(format, abbreviated_month_names: months)
...>   |> Tox.Date.shift(year: 2000)
...> end
iex> date = parse.("22-AUG-18")
iex> Calendar.strftime(date, format, abbreviated_month_names: fn x -> Enum.at(months, x - 1) end)