Lau Taarnskov
Audience: Beginner, Intermediate
Topic: Elixir

Date, Time, and Time Zones in Elixir 1.9

Elixir 1.8 and 1.9 bring changes to the date & time features in Elixir. This talk will go through how to get the most out of Elixir, as it stands now, for date and time functionalities.

Date and time are a part of every Elixir project. Whether it be timestamps in logs, databases, or business logic, date and time issues have the potential to cause significant problems if you are not prepared.

The `TimeZoneDatabase` behavior in Elixir 1.8+ allows using time zone functionality directly in the standard library. We'll walk through examples of how to use it and take advantage of the potential for fewer dependencies.

We will look at the different built-in types for date and time in Elixir. And when to use which one. Choosing the correct type is about semantics, meaning, representing information and data you have available, and avoiding creating fake data. This makes it easier for other developers, other libraries, and other systems to make the most of your date and time data.

We will also look at the new UTC DateTime sigil introduced in Elixir 1.9.

Learn about persisting the date and time types in databases with Ecto 3.

Civil time used today ultimately is tied to how the earth and sun move in relation to each other. This affects leap seconds, which are part of UTC. Besides that, there are many time zones which are determined politically and can change often and with short notice. In certain cases, this can be ignored. The types `NaiveDateTime`, `Date` and `Time` follow rules that do not change often because they are not concerned with these issues. But DateTime depend on an ever-changing database concerning time zones.

How do we keep the time zone database up to date whether deploying to a web server using Phoenix, using containers or to a Nerves device? There are different ways of doing that with different tradeoffs.

Besides looking at how to configure the Tzdata library to use with the TimeZoneDatabase behavior, also get a behind the scenes look at how this library evolved over the last five years. See how both macros and ETS have been used, and which tradeoffs have been made for performance improvements.


Lau started server-side web programming with PHP before switching to Ruby in 2003. He has built and been responsible for various multinational e-commerce solutions. After more than a decade of Ruby, he switched to Elixir as his preferred language in 2014. He likes to contribute to open source projects and has created the Elixir libraries Tzdata and Calendar. He was born in Denmark, has lived in South America and recently moved to San Francisco.