D. J. Bernstein
Internet mail
Internet mail message header format

Date fields

The value of a Date field is tokenizable. It is a timestamp, as defined below. For example:
     Date: 23 Dec 1995 19:25:43 -0000
It indicates the moment that the sender authorized delivery of the message, for example by pressing a Send button. This may be much later than the message's last modification time; it may be much earlier than the message's first trip through a transport protocol such as SMTP.

822 requires that every message include a Date field. This poses a problem for computers that don't know the time (in UTC, not just local time).

Timestamps: overview

A timestamp serves three purposes: it can communicate the creator's local time, the creator's time zone, and the actual time in UTC. Here ``creator'' means the creator of the timestamp; note that the creator of a Received timestamp is usually not the message sender.

For example, the timestamp

     Sun, 31 Mar 1996 15:53:10 +0200
indicates that the creator's local time is 15:53:10, that the creator's time zone is +0200 (two hours east of UTC), and that the actual time is 31 Mar 1996 13:53:10 in UTC. The day of the week can be omitted:
     31 Mar 1996 15:53:10 +0200
One can in principle insert extra spaces, tabs, and comments into a timestamp, like any other tokenizable field value:
     Mon (Lundi), 4(quatre)May (Mai) 1998(1998-05-04)03 : 04 : 12 +0000
Some MUAs produce an innocuous-looking comment, showing the local name for the local time zone, at the end of each timestamp:
     Mon, 30 Mar 1998 17:30:39 +1000 (EST)
But this confuses some clients: reportedly the MS Exchange Windows 95 email client looks at the EST, converts it into -0500, and then adds -0500 to the correct +1000. I recommend that writers put no tabs or comments into any timestamp, and no spaces before the comma or around the colons.

Timestamps: details

A timestamp contains
  1. optionally, the day of the week and a comma;
  2. the day of the month;
  3. the month;
  4. the year;
  5. the hour, a colon, and the minute;
  6. optionally, a colon and the second; and
  7. the time zone.

The day of the week is one of the following atoms: Sun, Mon, Tue, Wed, Thu, Fri, Sat. It must be consistent with the year, the month, and the day of the month.

The day of the month is an atom containing either 1 or 2 digits. Note that days from 1 through 9 can be written as 01 through 09.

The month is one of the following atoms: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec.

There are two possibilities for the year:

The hour is an atom containing 2 digits. The minute is an atom containing 2 digits. The second is an atom containing 2 digits.

There are two possibilities for the time zone:

The time shown is the creator's local time. The time shown, minus the zone shown, is the actual time in UTC.

Exception: a zone of -0000 indicates that the local time is unavailable or meaningless, and that the time shown is the actual time in UTC. (In contrast, a zone of +0000 indicates that the time shown is both local time and actual time in UTC.) This special meaning of -0000 was not specified in 822, but it is being widely used and is mentioned in 822bis.

Note that, in a few areas of the world, the difference between local time and UTC is almost never an exact multiple of 1 minute. Implementors can still use -0000 safely in this case.

In practice, clocks are not perfect. Recipients should be aware that timestamps can be wildly inaccurate, sometimes more than ten minutes away from the correct time.

In theory the textual parts of a date can be written in uppercase, lowercase, or any combination. However, I recommend using exactly the spelling shown above.

Time zone names

Here are some time zone names that appear in my archive. I have also seen ``GMT+0100'' for +0100, ``GMT+0200'' for +0200, etc.