ISO 8601

From Wikipedia, the free encyclopedia

Example combined date/time in UTC:
2007-04-03T10:27Z
Example separate date and time in UTC:
2007-04-03 10:27Z
Example date only:
2007-04-03
Example date with week number:
2007-W14-2

ISO 8601, "Data elements and interchange formats – Information interchange – Representation of dates and times" is an international standard for date and time representations. The signature feature of the ISO 8601 format is that all values are organized from most to least significant.

Contents

[edit] History of the standard

The first edition of the ISO 8601 standard was published in 1988 and unified and replaced a number of older ISO standards on various aspects of date and time notation: ISO 2014, ISO 2015, ISO 2711, ISO 3307, and ISO 4031[1]. It has since then been superseded by a second edition in 2000 and finally the current third edition, ISO 8601:2004, published 2004-12-03.

ISO 2014 was the standard that originally introduced the big-endian all-numeric date notation [YYYY]-[MM]-[DD], the ISO week numbering system was introduced in ISO 2015 and the identification of days by ordinal dates was originally defined in ISO 2711.

[edit] General principles

Date and time values are organized from most to least significant. Each value (e.g. year, month, day, time) has a fixed number of digits which must be padded with leading zeros. For instance, the notation "4:30 a.m." would be written 04:30. As a result, for each of the several formats of dates and times lexicographical order corresponds to chronological order, except for negative years.

Representation can be done in one of two formats: A basic format with a minimal number of characters, or an extended format with separators to enhance human readability.[2] The standard permits a hyphen separator between date elements, and a colon between hours, minutes, and seconds. For example, "2006-01-06" may be written "20060106" without ambiguity. The extended formats are preferred over basic formats because some basic formats are ambiguous.

Any number of fields may be dropped from any of the date and time formats, but the least significant fields must be dropped first. For example, "2004-05" is a valid ISO 8601 date, which indicates the 5th month of the year 2004. This date will never represent the 5th day of some unknown month in 2004.

Finally, the standard supports the addition of a decimal fraction to the smallest time unit, where higher precision is needed.

[edit] Dates

The standard uses the leap rule and month sizes of the Gregorian calendar, which is already the de facto standard of international trade.

[edit] Years

±YYYY

ISO 8601 prescribes a four-digit year to avoid the year 2000 problem. Years can also be expanded to greater than four digits and then should be preceded by a plus sign (+). Years before the epoch (year zero) are always preceded by a minus sign (-).

For purposes of reference ISO 8601 assigns the number 1875 to the year in which the Convention du Mètre was signed in Paris – a choice that has been criticized[citation needed] for not being reproducible without another calendar.

The 2000 version of ISO 8601 allowed rendition of a two-digit year (omitting the century), but the 2004 version eliminated that option and requires at least a four-digit year.

[edit] Calendar date

YYYY-MM-DD or YYYYMMDD
YYYY-MM but not YYYYMM

Calendar dates are the form familiar to most people. As represented in the box to the right, [YYYY] indicates a year with century. [MM] indicates the month of the year, 01 through 12. [DD] indicates the day of that month, from 01 through 31. For example, "5th of April 1981" may be represented as "1981-04-05" in the extended format, or "19810405" in the basic format.

The standard allows for dates to be written with less precision. For example, one may write "1981-04" to mean "April 1981", and one may simply write "1981" to refer to that year. The standard allows both YYYYMMDD and YYYY-MM-DD; but if the day is omitted, only YYYY-MM is allowed. By disallowing dates of the form YYYYMM, the standard avoids confusion with an alternative 6-digit date representation, YYMMDD, which was common in the 20th century, for example in the case of 102401, which could be understood as 2010-24-01 or 1024-01.

Previous versions of the standard allowed the omission of a century. Thus, 2007-10-20 might be abbreviated to 07-10-20 if the century was obvious. However, the 2004 version of the standard does not allow this, but requires that the year be specified using four digits.

[edit] Week dates

YYYY-Www or YYYYWww
YYYY-Www-D or YYYYWwwD
Main article: ISO week date

A week date specifies a so-called ISO year in the format [YYYY], a week number in the format [WW] prefixed by the letter 'W', and the weekday number, a digit [D] from 1 through 7, beginning with Monday and ending with Sunday. This form is popular in manufacturing.

Mutually equivalent definitions for week 01 are:

  • the week with the year's first Thursday in it
  • the week with 4 January in it
  • the first week with the majority (four or more) of its days in the starting year
  • the week starting with the Monday in the period 29 December - 4 January
  • If 1 January is on a Monday, Tuesday, Wednesday or Thursday, it is in week 01. If 1 January is on a Friday, Saturday or Sunday, it is in week 52 or 53 of the previous year.

The week number can be described by counting the Thursdays: week 12 contains the 12th Thursday of the year.

The ISO year starts at the first day (Monday) of week 01 and ends at the Sunday before the new ISO year (hence without overlap or gap). It consists of 52 or 53 full weeks. The ISO year number deviates from the number of the normal year (Gregorian year) on, if applicable, a Friday, Saturday, and Sunday, or a Saturday and Sunday, or just a Sunday, at the start of the ordinary year (which are at the end of the previous ISO year) and a Monday, Tuesday and Wednesday, or a Monday and Tuesday, or just a Monday, at the end of the ordinary year (which are in week 01 of the next ISO year). For Thursdays the ISO year number is always equal to the ordinary year number.

Examples:

  • 2008-12-29 is written "2009-W01-1"
  • 2010-01-03 is written "2009-W53-7"

For an overview of week numbering systems see week number. The US system has weeks from Sunday through Saturday, and partial weeks at the beginning and the end of the year. An advantage is that no separate year numbering like the ISO year is needed, while correspondence of lexicographical order and chronological order is preserved.

[edit] Ordinal dates

YYYY-DDD or YYYYDDD

Ordinal dates are a simple form for times when the arbitrary nature of week and month definitions are more of an impediment than an aid, for instance, when comparing dates from different calendars. As represented above, [YYYY] indicates a year. [DDD] is the day of that year, from 001 through 366 in leap years. For example, "1981-04-05" is also "1981-095".

This format has particular use for simple hardware systems that have need of a date system, but where including full calendar calculation software may be a significant nuisance. This system is frequently, if incorrectly, referred to as the Julian Date.

[edit] Further details about dates

The standard allows for expansion of the year, by agreement between sender and receiver[3]. Expansion means that the year may be written with more than four digits, which addresses the year 10,000 problem, by allowing the standard to specify dates later than AD 10000 or earlier than 10001 BC. Note however that expansion introduces ambiguities if separators are not used. For instance 200406 could either mean the year 200406 or June 2004. The ISO standard suggests that "provisions be made" to prevent such confusions[citation needed].

[edit] Times

hh:mm:ss or hhmmss
hh:mm or hhmm
hh

ISO 8601 uses the 24-hour clock system that is used by most of the world. The basic format is [hh][mm][ss] and the extended format is [hh]:[mm]:[ss]. [hh] refers to a zero-padded hour between 00 and 24, where 24 is only used to notate the midnight at the end of a calendar date. [mm] refers to a minute between 00 and 59. [ss] refers to a second between 00 and 59 (or 60 in the exceptional case of an added leap second). So a time might appear as "13:47:30" or "134730".

It is also acceptable to omit elements to reduce precision. [hh]:[mm], [hh][mm] and [hh] are all used.

Fractions may also be used with any of the three time elements. These are indicated by using the decimal point (either a comma (which is preferred) or dot). A fraction may only refer to the most precise component of a time representation – that is, to denote "14 hours, 30 and one half minutes", do not include a seconds figure. Represent it as "14:30,5" or "1430,5".

Midnight is a special case and can be referred to as both "00:00" and "24:00". The notation "00:00" is used at the beginning of the day, and is the most frequently used one. At the end of a day use "24:00". Note that "1981-04-05T24:00" is the same instant as "1981-04-06T00:00".

[edit] Time zones

<time>Z
<time>±hh:mm:ss or <time>±hhmmss
<time>±hh:mm or <time>±hhmm
<time>±hh

If no time zone information is given with a time, the time zone is assumed to be in some conventional local timezone. While it may be safe to assume a local zone when used between two people in the same area, it is ambiguous when used in communication between multiple timezones. It is usually preferable to indicate a time zone using the standard’s notation.

[edit] UTC

If the time is in UTC, it is very easy to show this. Simply add a 'Z' directly after the time, without a space. "09:30 UTC" is therefore represented as "09:30Z" or "0930Z". "14:45:15 UTC" would be "14:45:15Z" or "144515Z".

[edit] Other time zones

Other time zones are specified by their offset from UTC, in the format ±[hh]:[mm], ±[hh][mm] or ±[hh]. So if the time being described is one hour ahead of UTC (such as the time in Berlin during the winter) the offset would be "+01:00", "+0100" or simply "+01". This is appended to the time in the same way that 'Z' was above. Note that the offset is the actual offset from UTC, and does not include any information on daylight saving time. Times expressed in local time for a user in Chicago would be "-06:00" for the winter (Central Standard Time) and "-05:00" for the summer (Central Daylight Time). The following times all refer to the same moment: "18:30Z", "22:30+04", "1130-0700" and "15:00-03:30".

[edit] Time zone conversions

A possible source of confusion in doing time zone conversions is the ISO committee's decision to create time expressions using offsets from UTC rather than to UTC (i.e., having opposite sign). While a time expression looks like a conversion formula yielding its UTC value, it is not. Reverse the sign in the expression, however, and it is. Referring to the above examples, we see that 18:30 (UTC) = 22:30 - 04:00 = 11:30 + 07:00 = 15:00 + 3:30.

Conversion between time zones obeys the relationship

"time in zone A" + "offset from zone A to UTC" = "time in zone B" + "offset from zone B to UTC",

in which each side of the equation is its UTC value (note the phrases "offset from zone" rather than "offset from UTC").

Using the term "offset" as the Standard does (converting the above additions to subtractions), the conversion equation is

"time in zone B" = "time in zone A" - "offset from UTC to zone A" + "offset from UTC to zone B".

For example, what time is it in Los Angeles when the New York Stock Exchange opens?

if (X PST = xxxx-08) = (09:00 EST = 0900-05)
then X = 09:00 -(-05:00) +(-08:00) = 06:00
so (6:00 PST = 0600-08) = (09:00 EST = 0900-05).

[edit] Combined representations

<date>T<time>

Combining date and time representations is quite simple. It is in the format of <date>T<time>. The date and time sections are any proper representation of the date and time created by following the standard. A common use could be [YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]±[hh]:[mm]. "1981-04-05T14:30:30-05:00", for example.

The date and time representations may sometimes appear in proximity, separated by a space or other characters, in which case they occupy two separate fields in a data system, rather than a single combined representation. This is sometimes done for human readability. Unlike the above example, "1981-04-05" "14:30:30-05:00" are two separate representations, one for date and the other for time.

[edit] Duration

PnnYnnMnnDTnnHnnMnnS
PnnYnnWnnDTnnHnnMnnS
P<date>T<time>

Durations are represented by the format P[n]Y[n]M[n]DT[n]H[n]M[n]S (or P[n]Y[n]W[n]DT[n]H[n]M[n]S to use the week format). In this representation replace [n] with the appropriate number for the element that follows it (leading zeros are optional but may clarify ambiguous durations). The capital letters ('P', 'Y', 'M', 'W', 'D', 'T', 'H', 'M' and 'S') are used as they are and not replaced. Thus "P3Y6M4DT12H30M0S" defines "a period of three years, six months, four days, twelve hours, thirty minutes, and zero seconds". Elements may be omitted if their value is zero. To resolve ambiguity, "P1M" is one month and "PT1M" is one minute. The smallest value used may also have a decimal fraction, as in "P0,5Y" to indicate half a year.

Sometimes ISO 8601 is called the "metric date format", but the chosen abbreviations in durations do not match common metric symbols (a, mon, d, h, min, s).

Alternately, a format more based on the combined representation may be used: P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]. To represent the same duration as above in this format, use "P0003-06-04T12:30:00".

[edit] Time interval

<begin>/<end>
<begin>/<duration>
<duration>/<end>
<duration>

Time intervals specify an amount of time. They may be specified in four ways:

  1. Start and end, such as "2002-03-01T13:00:00Z/2003-05-11T15:30:00Z"
  2. Start and duration, such as "2002-03-01T13:00:00Z/P1Y2M10DT2H30M"
  3. Duration and end, such as "P1Y2M10DT2H30M/2003-05-11T15:30:00Z"
  4. Duration only, such as "P1Y2M10DT2H30M"

Of these, the first three require two separate values, separated by the interval designator, which is usually a forward slash "/". (The double hyphen (--) is permissible in some applications but is not preferred.) An example using the format from item #1 is "1981-04-05T14:30:30-05:00/2004-07-14T15:30:30-05:00". If any elements are missing from the second value, they are assumed to be the same as the first value, including time zone elements.

[edit] Repeating intervals

Rnn/<interval>
R/<interval>

Repeating intervals are formed by adding "R[n]/" to the beginning of an interval expression, where 'R' is used as the letter itself and [n] is replaced by the number of repetitions. Leaving out the value for [n] means an unbounded number of repetitions. So, to repeat the interval of "P1Y2M10DT2H30M" five times starting at "2002-03-01T13:00:00Z", use "R5/2002-03-01T13:00:00Z/P1Y2M10DT2H30M".

[edit] Usage

On the Internet, ISO 8601 is used by the W3C, defining a profile of the standard that restricts the supported formats to reduce the chance of error and the complexity of software.[4]

RFC 3339 defines a profile of ISO 8601 for the use in Internet protocols and standards. It explicitly excludes durations and dates before the common era. The more complex formats like week numbers and ordinal day are not permitted.[5]

ISO 8601 is referenced by several specifications, but not always is the full range of options of ISO 8601 used. For example, the various electronic programming guide standards for TV, digital radio, etc. use several forms to describe points in time and durations. The ID3 audio meta-data specification also makes use of a subset of ISO 8601 (see [1], §4).

The ISO 8601 week date, as of 2006, already appears in its basic form on major brand commercial packaging in the US. Its appearance depends on the particular packaging, canning, or bottling plant more than any particular brand. The format is particularly useful for quality assurance, so that production errors can be readily traced to work weeks, and products can be correctly targeted for recall.

[edit] Proprietary extensions

Based upon the concepts of the standard there are some specialized variations in use. For example some implementations may accept '0' as an alternative input value for Sunday.[citation needed]

[edit] Check digit (weekday)

The field separator 'T' is replaced by a letter representing the day of the week, e.g. A–G, which may also be present without [time], e.g. "2001-001A" for "Monday, 1 January 2001".[citation needed]

[edit] Week of month

Using the rule for determining the first week of the year, months can also unambiguously be divided into four or five weeks. The week of the month may then be appended by the day of the week. The literal 'W' could be dropped without introducing ambiguity in the full form, but is kept for consistency.[citation needed]

[edit] Quarters

The year can be divided into four quarters, usually consisting of three full months each, but there are also other conventions. The number of the quarter is preceded by a literal 'Q'. It may be used with any of the subdivisions that apply to years, but sometimes requires less digits: ordinal day ([DD]), week (W[WW]) and day of week ([D]), month ([M]) and day of month ([DD]) or week of month ([W]) and day of week.[citation needed]

[edit] Notes

  1. ^ Technical Committee ISO/TC 154, Processes, data elements and documents in commerce, industry and administration. (2004-12-01). ISO 8601:2004(E). ISO. Retrieved on 2006-11-15. “Annex A … From that concept representations of all other date and time values were logically derived; thus, ISO 2014, ISO 3307 and ISO 4031 have been superseded. … Identification of a particular date by means of ordinal dates (ISO 2711) and by means of the week numbering system (ISO 2015) were alternative methods that the basic concept of this International Standard could also encompass; thus, ISO 2015 and ISO 2711 have now been superseded.”
  2. ^ Numeric representation of Dates and Time
  3. ^ Technical Committee ISO/TC 154, Processes, data elements and documents in commerce, industry and administration. (2004-12-01). ISO 8601:2004(E). ISO. Retrieved on 2006-11-15. “3.5 Expansion … By mutual agreement of the partners in information interchange, it is permitted to expand the component identifying the calendar year, which is otherwise limited to four digits. This enables reference to dates and times in calendar years outside the range supported by complete representations, i.e. before the start of the year [0000] or after the end of the year [9999].”
  4. ^ Note about Date and Time Formats to W3C from Reuters
  5. ^ RFC 3339, section 5.6

[edit] See also

[edit] External links

[edit] Implementations