Time Formatting Parsing in Elixir
Our first example demonstrates time formatting and parsing in Elixir. Here’s the full source code:
defmodule TimeFormattingParsing do
def run do
# Here's a basic example of formatting a time
# according to ISO8601, which is similar to RFC3339
t = DateTime.utc_now()
IO.puts DateTime.to_iso8601(t)
# Time parsing uses the same format as formatting
{:ok, t1} = DateTime.from_iso8601("2012-11-01T22:08:41+00:00")
IO.inspect t1
# Elixir uses strftime-like directives for custom formatting
IO.puts Calendar.strftime(t, "%I:%M%p")
IO.puts Calendar.strftime(t, "%a %b %d %H:%M:%S %Y")
IO.puts Calendar.strftime(t, "%Y-%m-%dT%H:%M:%S.%f%:z")
# For parsing custom formats, we use DateTime.from_iso8601/2
{:ok, t2} = NaiveDateTime.from_iso8601("2014-10-23T20:41:00")
IO.inspect t2
# For purely numeric representations you can also
# use standard string formatting with the extracted
# components of the time value
formatted = :io_lib.format("~4..0B-~2..0B-~2..0BT~2..0B:~2..0B:~2..0B-00:00",
[t.year, t.month, t.day, t.hour, t.minute, t.second])
IO.puts formatted
# DateTime.from_iso8601/2 will return an error on malformed input
case DateTime.from_iso8601("8:41PM") do
{:error, reason} -> IO.puts "Error: #{reason}"
_ -> IO.puts "Parsed successfully"
end
end
end
TimeFormattingParsing.run()Let’s break down the key points:
Elixir uses
DateTimeandNaiveDateTimemodules for working with dates and times.For ISO8601 formatting (similar to RFC3339), we use
DateTime.to_iso8601/1.Parsing ISO8601 strings is done with
DateTime.from_iso8601/1.Custom formatting is achieved using
Calendar.strftime/2, which uses strftime-like directives.For parsing custom formats, you typically use
NaiveDateTime.from_iso8601/1or other specific parsing functions.Elixir doesn’t have a direct equivalent to Go’s layout-based parsing. Instead, it relies on specific parsing functions or third-party libraries for more complex parsing needs.
For purely numeric formatting, you can use
:io_lib.format/2with the extracted date-time components.Error handling in parsing is typically done using pattern matching on the return tuple.
To run the program, save it as time_formatting_parsing.exs and use the elixir command:
$ elixir time_formatting_parsing.exs
2023-06-13T12:34:56.789012Z
#DateTime<2012-11-01 22:08:41Z>
12:34PM
Tue Jun 13 12:34:56 2023
2023-06-13T12:34:56.789012+00:00
~N[2014-10-23 20:41:00]
2023-06-13T12:34:56-00:00
Error: cannot parse "8:41PM" as ISO8601This example demonstrates basic time formatting and parsing in Elixir. While the approach differs from other languages, Elixir provides powerful tools for working with dates and times.
Comments powered by Disqus