Technical Blog

DateTime Formats

Posted on

I have been interested in calendar and time reform for some time. Each proposal has its own advantages and disadvantages. One of the largest disadvantages is that breaking compatibility with established systems and norms is hard.

So, any system should do as much as it can to improve matters, while still keeping existing norms where possible. Of course, to find out what norms are important, one must ask people.

In all my discussions with people about time, something has become apparent: people like days. They like going to bed at the same time every day, waking up every morning, and generally having a measurable system that follows the rotational cycle.

Conclusion: days should form the basis for any system of time.

People are way less attached to months. Months are icky, of non-uniform length, and are the focus of most attempts at calendar reform.

Instead of proposing a new sort of month (many have done that before me, and there are some good proposals out there) I propose something much less radical. Something that has sat well with the handful of people I’ve run this by privately so far (some geeks, some not). I propose we stop including months in our datestamp expressions.

What format will we use, then? Thankfully, ISO8601 (from whence we get the YYYY-MM-DD format) defines a nice format for use to use: YYYY-DDD. All major software libraries support this format (for example: the strftime string for it is %Y-%j).

Getting a bit more radical

What about time? Hours and minutes really suck. They really do. 24 in a day? What kind of “halfway” is 12? or 30?

Since I’ve already established that days should be the basis for time, why not just keep using them? What is time trying to convey? It is trying to convey how far one is into the day.

Right now I am 70.7% through my day. How do I know that? I just read it off my clock! My clock looks like this:


That . is not just a separator: the whole bit after the – is a real number! (Some locales may prefer , as their decimal separator).

Halfway through your day becomes “.5” or “.500” instead of “12” or “1200”. That just makes sense!

Other benefits:

  • Math. 209.710 + .40 = 210.110 Simple!
  • If you take just up to millidays (three digits of time) and express in UTC+1 you get Swatch Internet Time

You’ll note that I am using this format on blog posts on this site.


I would just like to also advocate a minimalist expression of timezones. UTC timestamps should end in ‘Z’. Other zones can use their offset in hours (which is really a name, so keeping it in hours for compatibility is fine).


Internet activities, publications of international interest, etc, should be expressed in UTC with the ‘Z’ terminator.

5 Responses


Excellent. I too have started using YYYY-DDD since I wrote up a proposal for a new calendar: I also have one of the original Swatch BEAT time watches but stopped using it’s not as useful in practice without the ability to set the start of day (0 beats) to your local time zone.


Hey Stephen. I like YYYY-DDD.TTT+00 for print and its format. However, I don’t see 24 and 60 as time increments being dropped, due to their simple divisability.

Stephen Paul Weber

I personally find 10s a lot easier to divide. That’s kind of why every other unit system, except time, has already moved onto some decimal basis.

David Wolever

Hrm, overall it seems decent, except for timezones. If I understand correctly, -5 would either be -5 (useful for “backwards compatibility”, less useful for “figuring out what time it is”) or -.208¯3 (useful for “figuring out what time it is”, but otherwise ugly).

Leave a Response