The thoughts of G. Allen Morris III

ISO 8601 for Programmers

April 7th 2016

I came across a nice article on ISO 8601 and thought I would share it here and expand on it some.


  • date: %Y-%m-%d or %F for recent implementations (example: 2013-12-31)
  • time: %H:%M:%S or %T for recent implementations (example: 10:10:10)

However time should always include a timezone. In the simple case, where the time is in UTC you can simply add a Z to the end of the time %TZ.

If you want to represent a particular point in time you can use %FT%T%z.

On a modern posix system you should see output similar to 2016-04-07T04:44:30+0200.

In Ruby you can execute puts"%FT%T%z").

In C/C++ you can compile:

#include <time.h>
#include <stdio.h>

  time_t t;
  struct tm *tmp;
  char buffer[51];

  t = time(NULL);
  tmp = localtime(&t);

  strftime(buffer, sizeof(buffer), "%FT%T%z", tmp);
  printf("%s\n", buffer);
  return 0;

There is also a standard for Durations.