blob: a5e5640db90c13a5ffb24142c02c6d38e9dc7aa5 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for HTML5 for Apple macOS version 5.6.0">
<meta http-equiv="Content-Type" content=
"text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-us">
<link rel="stylesheet" href=
"http://www.unicode.org/reports/reports.css" type="text/css">
<title>UTS #35: Unicode LDML: Dates</title>
<style type="text/css">
<!--
.dtd {
font-family: monospace;
font-size: 90%;
background-color: #CCCCFF;
border-style: dotted;
border-width: 1px;
}
.xmlExample {
font-family: monospace;
font-size: 80%
}
.blockedInherited {
font-style: italic;
font-weight: bold;
border-style: dashed;
border-width: 1px;
background-color: #FF0000
}
.inherited {
font-weight: bold;
border-style: dashed;
border-width: 1px;
background-color: #00FF00
}
.element {
font-weight: bold;
color: red;
}
.attribute {
font-weight: bold;
color: maroon;
}
.attributeValue {
font-weight: bold;
color: blue;
}
li, p {
margin-top: 0.5em;
margin-bottom: 0.5em
}
h2, h3, h4, table {
margin-top: 1.5em;
margin-bottom: 0.5em;
}
-->
</style>
</head>
<body>
<table class="header" width="100%">
<tr>
<td class="icon"><a href="http://unicode.org"><img alt=
"[Unicode]" src="http://unicode.org/webscripts/logo60s2.gif"
width="34" height="33" style=
"vertical-align: middle; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px; border-top-width: 0px;"></a>&nbsp;
<a class="bar" href=
"http://www.unicode.org/reports/">Technical Reports</a></td>
</tr>
<tr>
<td class="gray">&nbsp;</td>
</tr>
</table>
<div class="body">
<h2 style="text-align: center">Unicode Technical Standard #35</h2>
<h1>Unicode Locale Data Markup Language (LDML)<br>
Part 4: Dates</h1>
<!-- At least the first row of this header table should be identical across the parts of this UTS. -->
<table border="1" cellpadding="2" cellspacing="0" class="wide">
<tr>
<td>Version</td>
<td>35</td>
</tr>
<tr>
<td>Editors</td>
<td>Peter Edberg and <a href=
"tr35.html#Acknowledgments">other CLDR committee
members</a></td>
</tr>
</table>
<p>For the full header, summary, and status, see <a href=
"tr35.html">Part 1: Core.</a></p>
<h3><i>Summary</i></h3>
<p>This document describes parts of an XML format
(<i>vocabulary</i>) for the exchange of structured locale data.
This format is used in the <a href=
"http://cldr.unicode.org/">Unicode Common Locale Data
Repository</a>.</p>
<p>This is a partial document, describing only those parts of
the LDML that are relevant for date, time, and time zone
formatting. For the other parts of the LDML see the <a href=
"tr35.html">main LDML document</a> and the links above.</p>
<h3><i>Status</i></h3>
<!-- NOT YET APPROVED
<p>
<i class="changed">This is a<b><font color="#ff3333">
draft </font></b>document which may be updated, replaced, or superseded by
other documents at any time. Publication does not imply endorsement
by the Unicode Consortium. This is not a stable document; it is
inappropriate to cite this document as other than a work in
progress.
</i>
</p>
END NOT YET APPROVED -->
<!-- APPROVED -->
<p><i>This document has been reviewed by Unicode members and
other interested parties, and has been approved for publication
by the Unicode Consortium. This is a stable document and may be
used as reference material or cited as a normative reference by
other specifications.</i></p>
<!-- END APPROVED -->
<p><i>This document has been reviewed by Unicode members and
other interested parties, and has been approved for publication
by the Unicode Consortium. This is a stable document and may be
used as reference material or cited as a normative reference by
other specifications.</i></p><!-- END APPROVED -->
<blockquote>
<p><i><b>A Unicode Technical Standard (UTS)</b> is an
independent specification. Conformance to the Unicode
Standard does not imply conformance to any UTS.</i></p>
</blockquote>
<p><i>Please submit corrigenda and other comments with the CLDR
bug reporting form [<a href="tr35.html#Bugs">Bugs</a>]. Related
information that is useful in understanding this document is
found in the <a href="tr35.html#References">References</a>. For
the latest version of the Unicode Standard see [<a href=
"tr35.html#Unicode">Unicode</a>]. For a list of current Unicode
Technical Reports see [<a href=
"tr35.html#Reports">Reports</a>]. For more information about
versions of the Unicode Standard, see [<a href=
"tr35.html#Versions">Versions</a>].</i></p>
<!-- This section of Parts should be identical in all of the parts of this UTS. -->
<h2><a name="Parts" href="#Parts" id="Parts">Parts</a></h2>
<p>The LDML specification is divided into the following
parts:</p>
<ul class="toc">
<li>Part 1: <a href="tr35.html#Contents">Core</a> (languages,
locales, basic structure)</li>
<li>Part 2: <a href="tr35-general.html#Contents">General</a>
(display names &amp; transforms, etc.)</li>
<li>Part 3: <a href="tr35-numbers.html#Contents">Numbers</a>
(number &amp; currency formatting)</li>
<li>Part 4: <a href="tr35-dates.html#Contents">Dates</a>
(date, time, time zone formatting)</li>
<li>Part 5: <a href=
"tr35-collation.html#Contents">Collation</a> (sorting,
searching, grouping)</li>
<li>Part 6: <a href=
"tr35-info.html#Contents">Supplemental</a> (supplemental
data)</li>
<li>Part 7: <a href=
"tr35-keyboards.html#Contents">Keyboards</a> (keyboard
mappings)</li>
</ul>
<h2><a name="Contents" href="#Contents" id="Contents">Contents
of Part 4, Dates</a></h2>
<!-- START Generated TOC: CheckHtmlFiles -->
<ul class="toc">
<li>1 <a href=
"#Overview_Dates_Element_Supplemental">Overview: Dates
Element, Supplemental Date and Calendar Information</a></li>
<li>2 <a href="#Calendar_Elements">Calendar Elements</a>
<ul class="toc">
<li>2.1 <a href="#months_days_quarters_eras">Elements
months, days, quarters, eras</a></li>
<li>2.2 <a href="#monthPatterns_cyclicNameSets">Elements
monthPatterns, cyclicNameSets</a></li>
<li>2.3 <a href="#dayPeriods">Element dayPeriods</a></li>
<li>2.4 <a href="#dateFormats">Element
dateFormats</a></li>
<li>2.5 <a href="#timeFormats">Element
timeFormats</a></li>
<li>2.6 <a href="#dateTimeFormats">Element
dateTimeFormats</a>
<ul class="toc">
<li>2.6.1 <a href="#dateTimeFormat">Element
dateTimeFormat</a>
<ul class="toc">
<li>Table: <a href=
"#Date_Time_Combination_Examples">Date-Time
Combination Examples</a></li>
</ul>
</li>
<li>2.6.2 <a href=
"#availableFormats_appendItems">Elements
availableFormats, appendItems</a>
<ul class="toc">
<li>2.6.2.1 <a href=
"#Matching_Skeletons">Matching Skeletons</a></li>
<li>2.6.2.2 <a href=
"#Missing_Skeleton_Fields">Missing Skeleton
Fields</a></li>
</ul>
</li>
<li>2.6.3 <a href="#intervalFormats">Element
intervalFormats</a></li>
</ul>
</li>
</ul>
</li>
<li>3 <a href="#Calendar_Fields">Calendar Fields</a></li>
<li>4 <a href="#Supplemental_Calendar_Data">Supplemental
Calendar Data</a>
<ul class="toc">
<li>4.1 <a href="#Calendar_Data">Calendar Data</a></li>
<li>4.2 <a href="#Calendar_Preference_Data">Calendar
Preference Data</a></li>
<li>4.3 <a href="#Week_Data">Week Data</a></li>
<li>4.4 <a href="#Time_Data">Time Data</a></li>
<li>4.5 <a href="#Day_Period_Rule_Sets">Day Period Rule
Sets</a>
<ul class="toc">
<li>4.5.1 <a href="#Day_Period_Rules">Day Period
Rules</a>
<ul class="toc">
<li>4.5.1.1 <a href="#Fixed_periods">Fixed
periods</a></li>
<li>4.5.1.2 <a href="#Variable_periods">Variable
periods</a></li>
<li>4.5.1.3 <a href=
"#Parsing_Day_Periods">Parsing Day
Periods</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>5 <a href="#Time_Zone_Names">Time Zone Names</a>
<ul class="toc">
<li>Table: <a href=
"#timeZoneNames_Elements_Used_for_Fallback">&lt;timeZoneNames&gt;
Elements Used for Fallback</a></li>
<li>5.1 <a href="#Metazone_Names">Metazone Names</a></li>
</ul>
</li>
<li>6 <a href="#Supplemental_Time_Zone_Data">Supplemental
Time Zone Data</a>
<ul class="toc">
<li>6.1 <a href="#Metazones">Metazones</a></li>
<li>6.2 <a href="#Windows_Zones">Windows Zones</a></li>
<li>6.3 <a href="#Primary_Zones">Primary Zones</a></li>
</ul>
</li>
<li>7 <a href="#Using_Time_Zone_Names">Using Time Zone
Names</a>
<ul class="toc">
<li>7.1 <a href="#Time_Zone_Format_Terminology">Time Zone
Format Terminology</a></li>
<li>7.2 <a href="#Time_Zone_Goals">Goals</a></li>
<li>7.3 <a href="#Time_Zone_Parsing">Parsing</a></li>
</ul>
</li>
<li>8 <a href="#Date_Format_Patterns">Date Format
Patterns</a>
<ul class="toc">
<li>Table: <a href="#Date_Format_Pattern_Examples">Date
Format Pattern Examples</a></li>
<li><a href="#Date_Field_Symbol_Table">Date Field Symbol
Table</a></li>
<li>8.1 <a href="#Localized_Pattern_Characters">Localized
Pattern Characters (deprecated)</a></li>
<li>8.2 <a href="#Date_Patterns_AM_PM">AM / PM</a></li>
<li>8.3 <a href="#Date_Patterns_Eras">Eras</a></li>
<li>8.4 <a href="#Date_Patterns_Week_Of_Year">Week of
Year</a></li>
<li>8.5 <a href="#Date_Patterns_Week_Elements">Week
Elements</a></li>
</ul>
</li>
<li>9 <a href="#Parsing_Dates_Times">Parsing Dates and
Times</a></li>
</ul><!-- END Generated TOC: CheckHtmlFiles -->
<h2>1 <a name="Overview_Dates_Element_Supplemental" href=
"#Overview_Dates_Element_Supplemental" id=
"Overview_Dates_Element_Supplemental">Overview: Dates Element,
Supplemental Date and Calendar Information</a></h2>
<p class="dtd">&lt;!ELEMENT dates (alias | (calendars?,
fields?, timeZoneNames?, special*)) &gt;</p>
<p>The LDML top-level &lt;dates&gt; element contains
information regarding the format and parsing of dates and
times, the formatting of date/time intervals, and the the
naming of various calendar elements.</p>
<ul>
<li>The &lt;calendars&gt; element is described in section 2
<a href="#Calendar_Elements">Calendar Elements</a>.</li>
<li>The &lt;fields&gt; element is described in section 3
<a href="#Calendar_Fields">Calendar Fields</a>.</li>
<li>The &lt;timeZoneNames&gt; element is described in section
5 <a href="#Time_Zone_Names">Time Zone Names</a>.</li>
<li>The formats use pattern characters described in section 8
<a href="#Date_Format_Patterns">Date Format
Patterns</a>.</li>
</ul>
<p class="dtd">&lt;!ELEMENT supplementalData ( …,
calendarData?, calendarPreferenceData?, weekData?, timeData?,
…, timezoneData?, …, metazoneInfo?, …, dayPeriodRuleSet*,
metaZones?, primaryZones?, windowsZones?, …) &gt;</p>
<p>The relevant top-level supplemental elements are listed
above.</p>
<ul>
<li>The &lt;calendarData&gt;, &lt;calendarPreferenceData&gt;,
&lt;weekData&gt;, &lt;timeData&gt;, and
&lt;dayPeriodRuleSet&gt; elements are described in section 4
<a href="#Supplemental_Calendar_Data">Supplemental Calendar
Data</a>.</li>
<li>The &lt;timezoneData&gt; element is deprecated and no
longer used; the &lt;metazoneInfo&gt; element is deprecated
at this level, and is now only used as a sub-element of
&lt;metaZones&gt;.</li>
<li>The &lt;metaZones&gt;, &lt;primaryZones&gt;, and
&lt;windowsZones&gt; elements are described in section 6
<a href="#Supplemental_Time_Zone_Data">Supplemental Time Zone
Data</a>.</li>
</ul>
<h2>2 <a name="Calendar_Elements" href="#Calendar_Elements" id=
"Calendar_Elements">Calendar Elements</a></h2>
<p class="dtd">&lt;!ELEMENT calendars (alias | (calendar*,
special*)) &gt;<br>
&lt;!ELEMENT calendar (alias | (months?, monthPatterns?, days?,
quarters?, dayPeriods?, eras?, cyclicNameSets?, dateFormats?,
timeFormats?, dateTimeFormats?, special*))&gt;<br>
&lt;!ATTLIST calendar type NMTOKEN #REQUIRED &gt;</p>
<p>The &lt;calendars&gt; element contains multiple
&lt;calendar&gt; elements, each of which specifies the fields
used for formatting and parsing dates and times according to
the calendar specified by the type attribute (e.g. "gregorian",
"buddhist", "islamic"). The behaviors for different calendars
in a locale may share certain aspects, such as the names for
weekdays. They differ in other respects; for example, the
Japanese calendar is similar to the Gregorian calendar but has
many more eras (one for each Emperor), and years are numbered
within each era. All calendar data inherits either from the
Gregorian calendar or other calendars in the same locale (and
if not present there then from the parent up to root), or else
inherits directly from the parent locale for certain calendars,
so only data that differs from what would be inherited needs to
be supplied. See <i><a href=
"tr35.html#Multiple_Inheritance">Multiple
Inheritance</a></i>.</p>
<p>Each calendar provides—directly or indirectly—two general
types of data:</p>
<ul>
<li><em>Calendar symbols, such as names for eras, months,
weekdays, and dayPeriods.</em> Names for weekdays, quarters
and dayPeriods are typically inherited from the Gregorian
calendar data in the same locale. Symbols for eras and months
should be provided for each calendar, except that the
"Gregorian-like" Buddhist, Japanese, and Minguo (ROC)
calendars also inherit their month names from the Gregorian
data in the same locale.</li>
<li><em>Format data for dates, times, and date-time
intervals.</em> Non-Gregorian calendars inherit standard time
formats (in the &lt;timeFormats&gt; element) from the
Gregorian calendar in the same locale. Most non-Gregorian
calendars (other than Chinese and Dangi) inherit general date
format data (in the &lt;dateFormats&gt; and
&lt;dateTimeFormats&gt; elements) from the "generic" calendar
format data in the same locale, which in turn inherits from
Gregorian.</li>
</ul>
<p>Calendars that use cyclicNameSets and monthPatterns (such as
Chinese and Dangi) have additional symbols and distinct
formats, and typically inherit these items (along with month
names) from their parent locales, instead of inheriting them
from Gregorian or generic data in the same locale.</p>
<p>The primary difference between Gregorian and "generic"
format data is that date formats in "generic" usually include
era with year, in order to provide an indication of which
calendar is being used (Gregorian calendar formats may also
commonly include era with year when Gregorian is not the
default calendar for the locale). Otherwise, the "generic" date
formats should normally be consistent with those in the
Gregorian calendar. The "generic" calendar formats are intended
to provide a consistent set of default formats for
non-Gregorian calendars in the locale, so that in most cases
the only data items that need be provided for non-Gregorian
calendars are the era names and month names (and the latter
only for calendars other than Buddhist, Japanese, and Minguo,
since those inherit month names from Gregorian).</p>
<h3>2.1 <a name="months_days_quarters_eras" href=
"#months_days_quarters_eras" id=
"months_days_quarters_eras">Elements months, days, quarters,
eras</a></h3>
<p class="dtd">&lt;!ELEMENT months ( alias | (monthContext*,
special*)) &gt;<br>
&lt;!ELEMENT monthContext ( alias | (default*, monthWidth*,
special*)) &gt;<br>
&lt;!ATTLIST monthContext type ( format | stand-alone )
#REQUIRED &gt;<br>
&lt;!ELEMENT monthWidth ( alias | (month*, special*)) &gt;<br>
&lt;!ATTLIST monthWidth type ( abbreviated| narrow | wide)
#REQUIRED &gt;<br>
&lt;!ELEMENT month ( #PCDATA )* &gt;<br>
&lt;!ATTLIST month type ( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 ) #REQUIRED &gt;<br>
&lt;!ATTLIST month yeartype ( standard | leap ) #IMPLIED
&gt;</p>
<p class="dtd">&lt;!ELEMENT days ( alias | (dayContext*,
special*)) &gt;<br>
&lt;!ELEMENT dayContext ( alias | (default*, dayWidth*,
special*)) &gt;<br>
&lt;!ATTLIST dayContext type ( format | stand-alone ) #REQUIRED
&gt;<br>
&lt;!ELEMENT dayWidth ( alias | (day*, special*)) &gt;<br>
&lt;!ATTLIST dayWidth type NMTOKEN #REQUIRED &gt;<br>
&lt;!ELEMENT day ( #PCDATA ) &gt;<br>
&lt;!ATTLIST day type ( sun | mon | tue | wed | thu | fri | sat
) #REQUIRED &gt;</p>
<p class="dtd">&lt;!ELEMENT quarters ( alias |
(quarterContext*, special*)) &gt;<br>
&lt;!ELEMENT quarterContext ( alias | (default*, quarterWidth*,
special*)) &gt;<br>
&lt;!ATTLIST quarterContext type ( format | stand-alone )
#REQUIRED &gt;<br>
&lt;!ELEMENT quarterWidth ( alias | (quarter*, special*))
&gt;<br>
&lt;!ATTLIST quarterWidth type NMTOKEN #REQUIRED &gt;<br>
&lt;!ELEMENT quarter ( #PCDATA ) &gt;<br>
&lt;!ATTLIST quarter type ( 1 | 2 | 3 | 4 ) #REQUIRED &gt;</p>
<p class="dtd">&lt;!ELEMENT eras (alias | (eraNames?, eraAbbr?,
eraNarrow?, special*)) &gt;<br>
&lt;!ELEMENT eraNames ( alias | (era*, special*) ) &gt;<br>
&lt;!ELEMENT eraAbbr ( alias | (era*, special*) ) &gt;<br>
&lt;!ELEMENT eraNarrow ( alias | (era*, special*) )
&gt;<br></p>
<p>The month and quarter names are identified numerically,
starting at 1. The weekday names are identified with short
strings, since there is no universally-accepted numeric
designation.</p>
<p>Month, day, and quarter names may vary along two axes: the
width and the context.</p>
<p>The context is either <i>format</i> (the default), the form
used within a complete date format string (such as "Saturday,
November 12", or <i>stand-alone</i>, the form for date elements
used independently, such as in calendar headers. The most
important distinction between format and stand-alone forms is a
grammatical distinction, for languages that require it. For
example, many languages require that a month name without an
associated day number (i.e. an independent form) be in the
basic <i>nominative</i> form, while a month name with an
associated day number (as in a complete date format) should be
in a different grammatical form: <i>genitive</i>,
<i>partitive</i>, etc. In past versions of CLDR, the
distinction between format and stand-alone forms was also used
to control capitalization (with stand-alone forms using
titlecase); however, this can be controlled separately and more
precisely using the &lt;contextTransforms&gt; element as
described in <i><a href=
"tr35-general.html#Context_Transform_Elements">ContextTransform
Elements</a></i>, so stand-alone forms should generally use
middle-of-sentence capitalization. However, if in a given
language, certain context/width combinations are always used in
a titlecase form — for example, stand-alone narrow forms for
months or weekdays — then these should be provided in that
form.</p>
<p>The width can be <i>wide</i> (the default),
<i>abbreviated</i>, or <i>narrow</i>; for days only, the width
can also be <i>short,</i> which is ideally between the
abbreviated and narrow widths, but must be no longer than
abbreviated and no shorter than narrow (if short day names are
not explicitly specified, abbreviated day names are used
instead). Note that for &lt;monthPattern&gt;, described in the
next section:</p>
<ul>
<li>There is an additional context type <i>numeric</i></li>
<li>When the context type is numeric, the width has a special
type <i>all</i></li>
</ul>
<p>The format values must be distinct for the wide,
abbreviated, and short widths. However, values for the narrow
width in either format or stand-alone contexts, as well as
values for other widths in stand-alone contexts, need not be
distinct; they might only be distinguished by context. For
example, "S" may be used both for Saturday and for Sunday. The
narrow width is typically used in calendar headers; it must be
the shortest possible width, no more than one character (or
grapheme cluster, or exemplar set element) in stand-alone
values (not including punctuation), and the shortest possible
widths (in terms of grapheme clusters) in format values. The
short width (if present) is often the shortest unambiguous
form.</p>
<p>Era names should be distinct within each of the widths,
including narrow; there is less disambiguating information for
them, and they are more likely to be used in a format that
requires parsing.</p>
<p>Due to aliases in root, the forms inherit "sideways". (See
<i><a href="tr35.html#Multiple_Inheritance">Multiple
Inheritance</a></i>.) For example, if the abbreviated format
data for Gregorian does not exist in a language X (in the chain
up to root), then it inherits from the wide format data in that
same language X.</p>
<pre id="line369">&lt;monthContext type="format"&gt;
&lt;monthWidth type="abbreviated"&gt;
&lt;alias source="locale" path="../monthWidth[@type='wide']"/&gt;
&lt;/monthWidth&gt;
&lt;monthWidth type="narrow"&gt;
&lt;alias source="locale" path="../../monthContext[@type='<b>stand-alone</b>']/monthWidth[@type='narrow']"/&gt;
&lt;/monthWidth&gt;
&lt;monthWidth type="wide"&gt;
&lt;month type="1"&gt;1&lt;/month&gt;
...
&lt;month type="12"&gt;12&lt;/month&gt;
&lt;/monthWidth&gt;
&lt;/monthContext&gt;
&lt;monthContext type="stand-alone"&gt;
&lt;monthWidth type="abbreviated"&gt;
&lt;alias source="locale" path="../../monthContext[@type='<b>format</b>']/monthWidth[@type='abbreviated']"/&gt;
&lt;/monthWidth&gt;
&lt;monthWidth type="narrow"&gt;
&lt;month type="1"&gt;1&lt;/month&gt;
...
&lt;month type="12"&gt;12&lt;/month&gt;
&lt;/monthWidth&gt;
&lt;monthWidth type="wide"&gt;
&lt;alias source="locale" path="../../monthContext[@type='<b>format</b>']/monthWidth[@type='wide']"/&gt;
&lt;/monthWidth&gt;
&lt;/monthContext&gt;</pre>
<p>The yeartype attribute for months is used to distinguish
alternate month names that would be displayed for certain
calendars during leap years. The practical example of this
usage occurs in the Hebrew calendar, where the 7th month "Adar"
occurs in non-leap years, with the 6th month being skipped, but
in leap years there are two months named "Adar I" and "Adar
II". There are currently only two defined year types, standard
(the implied default) and leap.</p>
<p>For era elements, an additional alt="variant" form may be
supplied. This is primarily intended for use in the "gregorian"
calendar, with which two parallel sets of era designations are
used in some locales: one set with a religious reference (e.g.
English BC/AD), and one set without (e.g. English BCE/CE). The
most commonly-used set for the locale should be provided as the
default, and the other set may be provided as the alt="variant"
forms. See the example below.</p>
<p class="example">Example:</p>
<pre> &lt;calendar type="<span style=
"color: blue">gregorian</span>"&gt;
&lt;months&gt;
&lt;monthContext type="<span style=
"color: blue">format</span>"&gt;
&lt;monthWidth type="<span style=
"color: blue">wide</span>"&gt;
&lt;month type="<span style=
"color: blue">1</span>"&gt;<span style=
"color: blue">January</span>&lt;/month&gt;
&lt;month type="<span style=
"color: blue">2</span>"&gt;<span style=
"color: blue">February</span>&lt;/month&gt;
...
&lt;month type="<span style=
"color: blue">11</span>"&gt;<span style=
"color: blue">November</span>&lt;/month&gt;
&lt;month type="<span style=
"color: blue">12</span>"&gt;<span style=
"color: blue">December</span>&lt;/month&gt;
&lt;/monthWidth&gt;
&lt;monthWidth type="<span style=
"color: blue">abbreviated</span>"&gt;
&lt;month type="<span style=
"color: blue">1</span>"&gt;<span style=
"color: blue">Jan</span>&lt;/month&gt;
&lt;month type="<span style=
"color: blue">2</span>"&gt;<span style=
"color: blue">Feb</span>&lt;/month&gt;
...
&lt;month type="<span style=
"color: blue">11</span>"&gt;<span style=
"color: blue">Nov</span>&lt;/month&gt;
&lt;month type="<span style=
"color: blue">12</span>"&gt;<span style=
"color: blue">Dec</span>&lt;/month&gt;
&lt;/monthWidth&gt;
&lt;monthContext type="<span style=
"color: blue">stand-alone</span>"&gt;
&lt;default type="<span style=
"color: blue">wide</span>"/&gt;
&lt;monthWidth type="<span style=
"color: blue">wide</span>"&gt;
&lt;month type="<span style=
"color: blue">1</span>"&gt;<span style=
"color: blue">Januaria</span>&lt;/month&gt;
&lt;month type="<span style=
"color: blue">2</span>"&gt;<span style=
"color: blue">Februaria</span>&lt;/month&gt;
...
&lt;month type="<span style=
"color: blue">11</span>"&gt;<span style=
"color: blue">Novembria</span>&lt;/month&gt;
&lt;month type="<span style=
"color: blue">12</span>"&gt;<span style=
"color: blue">Decembria</span>&lt;/month&gt;
&lt;/monthWidth&gt;
&lt;monthWidth type="<span style=
"color: blue">narrow</span>"&gt;
&lt;month type="<span style=
"color: blue">1</span>"&gt;<span style=
"color: blue">J</span>&lt;/month&gt;
&lt;month type="<span style=
"color: blue">2</span>"&gt;<span style=
"color: blue">F</span>&lt;/month&gt;
...
&lt;month type="<span style=
"color: blue">11</span>"&gt;<span style=
"color: blue">N</span>&lt;/month&gt;
&lt;month type="<span style=
"color: blue">12</span>"&gt;<span style=
"color: blue">D</span>&lt;/month&gt;
&lt;/monthWidth&gt;
&lt;/monthContext&gt;
&lt;/months&gt;
&lt;days&gt;
&lt;dayContext type="<span style=
"color: blue">format</span>"&gt;
&lt;dayWidth type="<span style=
"color: blue">wide</span>"&gt;
&lt;day type="<span style=
"color: blue">sun</span>"&gt;<span style=
"color: blue">Sunday</span>&lt;/day&gt;
&lt;day type="<span style=
"color: blue">mon</span>"&gt;<span style=
"color: blue">Monday</span>&lt;/day&gt;
...
&lt;day type="<span style=
"color: blue">fri</span>"&gt;<span style=
"color: blue">Friday</span>&lt;/day&gt;
&lt;day type="<span style=
"color: blue">sat</span>"&gt;<span style=
"color: blue">Saturday</span>&lt;/day&gt;
&lt;/dayWidth&gt;
&lt;dayWidth type="<span style=
"color: blue">abbreviated</span>"&gt;
&lt;day type="<span style=
"color: blue">sun</span>"&gt;<span style=
"color: blue">Sun</span>&lt;/day&gt;
&lt;day type="<span style=
"color: blue">mon</span>"&gt;<span style=
"color: blue">Mon</span>&lt;/day&gt;
...
&lt;day type="<span style=
"color: blue">fri</span>"&gt;<span style=
"color: blue">Fri</span>&lt;/day&gt;
&lt;day type="<span style=
"color: blue">sat</span>"&gt;<span style=
"color: blue">Sat</span>&lt;/day&gt;
&lt;/dayWidth&gt;
&lt;dayWidth type="<span style=
"color: blue">narrow</span>"&gt;
&lt;day type="<span style=
"color: blue">sun</span>"&gt;<span style=
"color: blue">Su</span>&lt;/day&gt;
&lt;day type="<span style=
"color: blue">mon</span>"&gt;<span style=
"color: blue">M</span>&lt;/day&gt;
...
&lt;day type="<span style=
"color: blue">fri</span>"&gt;<span style=
"color: blue">F</span>&lt;/day&gt;
&lt;day type="<span style=
"color: blue">sat</span>"&gt;<span style=
"color: blue">Sa</span>&lt;/day&gt;
&lt;/dayWidth&gt;
&lt;/dayContext&gt;
&lt;dayContext type="<span style=
"color: blue">stand-alone</span>"&gt;
&lt;dayWidth type="<span style=
"color: blue">narrow</span>"&gt;
&lt;day type="<span style=
"color: blue">sun</span>"&gt;<span style=
"color: blue">S</span>&lt;/day&gt;
&lt;day type="<span style=
"color: blue">mon</span>"&gt;<span style=
"color: blue">M</span>&lt;/day&gt;
...
&lt;day type="<span style=
"color: blue">fri</span>"&gt;<span style=
"color: blue">F</span>&lt;/day&gt;
&lt;day type="<span style=
"color: blue">sat</span>"&gt;<span style=
"color: blue">S</span>&lt;/day&gt;
&lt;/dayWidth&gt;
&lt;/dayContext&gt;
&lt;/days&gt;
&lt;quarters&gt;
&lt;quarterContext type="<span style=
"color: blue">format</span>"&gt;
&lt;quarterWidth type="<span style=
"color: blue">abbreviated</span>"&gt;
&lt;quarter type="<span style=
"color: blue">1</span>"&gt;<span style=
"color: blue">Q1</span>&lt;/quarter&gt;
&lt;quarter type="<span style=
"color: blue">2</span>"&gt;<span style=
"color: blue">Q2</span>&lt;/quarter&gt;
&lt;quarter type="<span style=
"color: blue">3</span>"&gt;<span style=
"color: blue">Q3</span>&lt;/quarter&gt;
&lt;quarter type="<span style=
"color: blue">4</span>"&gt;<span style=
"color: blue">Q4</span>&lt;/quarter&gt;
&lt;/quarterWidth&gt;
&lt;quarterWidth type="<span style=
"color: blue">wide</span>"&gt;
&lt;quarter type="<span style=
"color: blue">1</span>"&gt;<span style=
"color: blue">1st quarter</span>&lt;/quarter&gt;
&lt;quarter type="<span style=
"color: blue">2</span>"&gt;<span style=
"color: blue">2nd quarter</span>&lt;/quarter&gt;
&lt;quarter type="<span style=
"color: blue">3</span>"&gt;<span style=
"color: blue">3rd quarter</span>&lt;/quarter&gt;
&lt;quarter type="<span style=
"color: blue">4</span>"&gt;<span style=
"color: blue">4th quarter</span>&lt;/quarter&gt;
&lt;/quarterWidth&gt;
&lt;/quarterContext&gt;
&lt;/quarters&gt;
&lt;eras&gt;
&lt;eraAbbr&gt;
&lt;era type="<span style=
"color: blue">0</span>"&gt;<span style=
"color: blue">BC</span>&lt;/era&gt;
&lt;era type="<span style=
"color: blue">0</span>" alt="<span style=
"color: blue">variant</span>"&gt;<span style=
"color: blue">BCE</span>&lt;/era&gt;
&lt;era type="<span style=
"color: blue">1</span>"&gt;<span style=
"color: blue">AD</span>&lt;/era&gt;
&lt;era type="<span style=
"color: blue">1</span>" alt="<span style=
"color: blue">variant</span>"&gt;<span style=
"color: blue">CE</span>&lt;/era&gt;
&lt;/eraAbbr&gt;
&lt;eraNames&gt;
&lt;era type="<span style=
"color: blue">0</span>"&gt;<span style=
"color: blue">Before Christ</span>&lt;/era&gt;
&lt;era type="<span style=
"color: blue">0</span>" alt="<span style=
"color: blue">variant</span>"&gt;<span style=
"color: blue">Before Common Era</span>&lt;/era&gt;
&lt;era type="<span style=
"color: blue">1</span>"&gt;<span style=
"color: blue">Anno Domini</span>&lt;/era&gt;
&lt;era type="<span style=
"color: blue">1</span>" alt="<span style=
"color: blue">variant</span>"&gt;<span style=
"color: blue">Common Era</span>&lt;/era&gt;
&lt;/eraNames&gt;
&lt;eraNarrow&gt;
&lt;era type="<span style=
"color: blue">0</span>"&gt;<span style=
"color: blue">B</span>&lt;/era&gt;
&lt;era type="<span style=
"color: blue">1</span>"&gt;<span style=
"color: blue">A</span>&lt;/era&gt;
&lt;/eraNarrow&gt;
&lt;/eras&gt;
</pre>
<h3>2.2 <a name="monthPatterns_cyclicNameSets" href=
"#monthPatterns_cyclicNameSets" id=
"monthPatterns_cyclicNameSets">Elements monthPatterns,
cyclicNameSets</a></h3>
<p class="dtd">&lt;!ELEMENT monthPatterns ( alias |
(monthPatternContext*, special*)) &gt;<br>
&lt;!ELEMENT monthPatternContext ( alias | (monthPatternWidth*,
special*)) &gt;<br>
&lt;!ATTLIST monthPatternContext type ( format | stand-alone |
numeric ) #REQUIRED &gt;<br>
&lt;!ELEMENT monthPatternWidth ( alias | (monthPattern*,
special*)) &gt;<br>
&lt;!ATTLIST monthPatternWidth type ( abbreviated| narrow |
wide | all ) #REQUIRED &gt;<br>
&lt;!ELEMENT monthPattern ( #PCDATA ) &gt;<br>
&lt;!ATTLIST monthPattern type ( leap | standardAfterLeap |
combined ) #REQUIRED &gt;<br></p>
<p class="dtd">&lt;!ELEMENT cyclicNameSets ( alias |
(cyclicNameSet*, special*)) &gt;<br>
&lt;!ELEMENT cyclicNameSet ( alias | (cyclicNameContext*,
special*)) &gt;<br>
&lt;!ATTLIST cyclicNameSet type ( years | months | days |
dayParts | zodiacs | solarTerms ) #REQUIRED &gt;<br>
&lt;!ELEMENT cyclicNameContext ( alias | (cyclicNameWidth*,
special*)) &gt;<br>
&lt;!ATTLIST cyclicNameContext type ( format | stand-alone )
#REQUIRED &gt;<br>
&lt;!ELEMENT cyclicNameWidth ( alias | (cyclicName*, special*))
&gt;<br>
&lt;!ATTLIST cyclicNameWidth type ( abbreviated | narrow | wide
) #REQUIRED &gt;<br>
&lt;!ELEMENT cyclicName ( #PCDATA ) &gt;<br>
&lt;!ATTLIST cyclicName type NMTOKEN #REQUIRED &gt;<br></p>
<p>The Chinese lunar calendar can insert a leap month after
nearly any month of its year; when this happens, the month
takes the name of the preceding month plus a special marker.
The Hindu lunar calendars can insert a leap month before any
one or two months of the year; when this happens, not only does
the leap month take the name of the following month plus a
special marker, the following month also takes a special
marker. Moreover, in the Hindu calendar sometimes a month is
skipped, in which case the preceding month takes a special
marker plus the names of both months. The &lt;monthPatterns&gt;
element structure supports these special kinds of month names.
It parallels the &lt;months&gt; element structure, with various
contexts and widths, but with some differences:</p>
<ul>
<li>Since the month markers may be applied to numeric months
as well, there is an additional monthPatternContext type
"numeric" for this case. When the numeric context is used,
there is no need for different widths, so the
monthPatternWidth type is "all" for this case.</li>
<li>The monthPattern element itself is a pattern showing how
to create the modified month name from the standard month
name(s). The three types of possible pattern are for "leap",
"standardAfterLeap", and "combined".</li>
<li>The &lt;monthPatterns&gt; element is not present for
calendars that do not need it.</li>
</ul>
<p>The Chinese and Hindu lunar calendars also use a 60-name
cycle for designating years. The Chinese lunar calendars can
also use that cycle for months and days, and can use 12-name
cycles for designating day subdivisions or zodiac names
associated with years; a 24-name cycle of solar terms (12 pairs
of minor and major terms) is used to mark intervals in the
solar cycle. The &lt;cyclicNameSets&gt; element structure
supports these special kinds of name cycles; a cyclicNameSet
can be provided for types "year", "month", "day", "dayParts",
or "zodiacs". For each cyclicNameSet, there is a context and
width structure similar to that for day names. For a given
context and width, a set of cyclicName elements provides the
actual names.</p>
<p>Example:</p>
<pre>
&lt;monthPatterns&gt;
&lt;monthPatternContext type="format"&gt;
&lt;monthPatternWidth type="wide"&gt;
&lt;monthPattern type="leap"&gt;闰{0}&lt;/monthPattern&gt;
&lt;/monthPatternWidth&gt;
&lt;/monthPatternContext&gt;
&lt;monthPatternContext type="stand-alone"&gt;
&lt;monthPatternWidth type="narrow"&gt;
&lt;monthPattern type="leap"&gt;闰{0}&lt;/monthPattern&gt;
&lt;/monthPatternWidth&gt;
&lt;/monthPatternContext&gt;
&lt;monthPatternContext type="numeric"&gt;
&lt;monthPatternWidth type="all"&gt;
&lt;monthPattern type="leap"&gt;闰{0}&lt;/monthPattern&gt;
&lt;/monthPatternWidth&gt;
&lt;/monthPatternContext&gt;
&lt;/monthPatterns&gt;
&lt;cyclicNameSets&gt;
&lt;cyclicNameSet type="years"&gt;
&lt;cyclicNameContext type="format"&gt;
&lt;cyclicNameWidth type="abbreviated"&gt;
&lt;cyclicName type="1"&gt;甲子&lt;/cyclicName&gt;
&lt;cyclicName type="2"&gt;乙丑&lt;/cyclicName&gt;
...
&lt;cyclicName type="59"&gt;壬戌&lt;/cyclicName&gt;
&lt;cyclicName type="60"&gt;癸亥&lt;/cyclicName&gt;
&lt;/cyclicNameWidth&gt;
&lt;/cyclicNameContext&gt;
&lt;/cyclicNameSet&gt;
&lt;cyclicNameSet type="zodiacs"&gt;
&lt;cyclicNameContext type="format"&gt;
&lt;cyclicNameWidth type="abbreviated"&gt;
&lt;cyclicName type="1"&gt;鼠&lt;/cyclicName&gt;
&lt;cyclicName type="2"&gt;牛&lt;/cyclicName&gt;
...
&lt;cyclicName type="11"&gt;狗&lt;/cyclicName&gt;
&lt;cyclicName type="12"&gt;猪&lt;/cyclicName&gt;
&lt;/cyclicNameWidth&gt;
&lt;/cyclicNameContext&gt;
&lt;/cyclicNameSet&gt;
&lt;cyclicNameSet type="solarTerms"&gt;
&lt;cyclicNameContext type="format"&gt;
&lt;cyclicNameWidth type="abbreviated"&gt;
&lt;cyclicName type="1"&gt;立春&lt;/cyclicName&gt;
&lt;cyclicName type="2"&gt;雨水&lt;/cyclicName&gt;
...
&lt;cyclicName type="23"&gt;小寒&lt;/cyclicName&gt;
&lt;cyclicName type="24"&gt;大寒&lt;/cyclicName&gt;
&lt;/cyclicNameWidth&gt;
&lt;/cyclicNameContext&gt;
&lt;/cyclicNameSet&gt;
&lt;/cyclicNameSets&gt;
</pre>
<h3>2.3 <a name="dayPeriods" href="#dayPeriods" id=
"dayPeriods">Element dayPeriods</a></h3>
<p>The former am/pm elements have been deprecated, and replaced
by the more flexible dayPeriods.</p>
<p class="dtd">&lt;!ELEMENT dayPeriods ( alias |
(dayPeriodContext*) ) &gt;</p>
<p class="dtd">&lt;!ELEMENT dayPeriodContext (alias |
dayPeriodWidth*) &gt;<br>
&lt;!ATTLIST dayPeriodContext type NMTOKEN #REQUIRED &gt;</p>
<p class="dtd">&lt;!ELEMENT dayPeriodWidth (alias | dayPeriod*)
&gt;<br>
&lt;!ATTLIST dayPeriodWidth type NMTOKEN #REQUIRED &gt;</p>
<p class="dtd">&lt;!ELEMENT dayPeriod ( #PCDATA ) &gt;<br>
&lt;!ATTLIST dayPeriod type NMTOKEN #REQUIRED &gt;</p>
<p>These behave like months, days, and so on in terms of having
context and width. Each locale has an associated
dayPeriodRuleSet in the supplemental data, rules that specify
when the day periods start and end for that locale. Each type
in the rules needs to have a translation in a dayPeriod (but if
translation data is missing for a particular variable dayPeriod
in the locale’s language and script, formatting should fall
back to using the am/pm values). For more information, see
<em><a href="#Day_Period_Rules">Day Period Rules</a></em>.</p>
<p>The dayPeriod names should be distinct within each of the
context/width combinations, including narrow; as with era
names, there is less disambiguating information for them, and
they are more likely to be used in a format that requires
parsing. In some unambiguous cases, it is acceptable for
certain overlapping dayPeriods to be the same, such as the
names for "am" and "morning", or the names for "pm" and
"afternoon".</p>
<p class="example">Example:</p>
<pre>
&lt;dayPeriods&gt;
&lt;dayPeriodContext type="format"&gt;
&lt;dayPeriodWidth type="wide"&gt;
&lt;dayPeriod type="am"&gt;AM&lt;/dayPeriod&gt;
&lt;dayPeriod type="noon"&gt;noon&lt;/dayPeriod&gt;
&lt;dayPeriod type="pm"&gt;PM&lt;/dayPeriod&gt;
&lt;/dayPeriodWidth&gt;
&lt;/dayPeriodContext&gt;
&lt;/dayPeriods&gt;
</pre>
<h3>2.4 <a name="dateFormats" href="#dateFormats" id=
"dateFormats">Element dateFormats</a></h3>
<p class="dtd">&lt;!ELEMENT dateFormats (alias | (default*,
dateFormatLength*, special*)) &gt;<br>
&lt;!ELEMENT dateFormatLength (alias | (default*, dateFormat*,
special*)) &gt;<br>
&lt;!ATTLIST dateFormatLength type ( full | long | medium |
short ) #REQUIRED &gt;<br>
&lt;!ELEMENT dateFormat (alias | (pattern*, displayName*,
special*)) &gt;</p>
<p>Standard date formats have the following form:</p>
<pre> &lt;dateFormats&gt;
&lt;dateFormatLength type=”<span style=
"color: blue">full</span>”&gt;
&lt;dateFormat&gt;
&lt;pattern&gt;<span style=
"color: blue">EEEE, MMMM d, y</span>&lt;/pattern&gt;
&lt;/dateFormat&gt;
&lt;/dateFormatLength&gt;
&lt;dateFormatLength type="<span style=
"color: blue">medium</span>"&gt;
&lt;dateFormat type="<span style=
"color: blue">DateFormatsKey2</span>"&gt;
&lt;pattern&gt;<span style=
"color: blue">MMM d, y</span>&lt;/pattern&gt;
&lt;/dateFormat&gt;
&lt;/dateFormatLength&gt;
&lt;dateFormats&gt;</pre>
<p>The patterns for date formats and time formats are defined
in <i><a href="#Date_Format_Patterns">Date Format
Patterns</a>.</i> These patterns are intended primarily for
display of isolated date and time strings in user-interface
elements, rather than for date and time strings in the middle
of running text, so capitalization and grammatical form should
be chosen appropriately.</p>
<p>Standard date and time patterns are each normally provided
in four types: full (usually with weekday name), long (with
wide month name), medium, and short (usually with numeric
month).</p>
<h3>2.5 <a name="timeFormats" href="#timeFormats" id=
"timeFormats">Element timeFormats</a></h3>
<p class="dtd">&lt;!ELEMENT timeFormats (alias | (default*,
timeFormatLength*, special*)) &gt;<br>
&lt;!ELEMENT timeFormatLength (alias | (default*, timeFormat*,
special*)) &gt;<br>
&lt;!ATTLIST timeFormatLength type ( full | long | medium |
short ) #REQUIRED &gt;<br>
&lt;!ELEMENT timeFormat (alias | (pattern*, displayName*,
special*)) &gt;</p>
<p>Standard time formats have the following form:</p>
<pre> &lt;timeFormats&gt;
&lt;timeFormatLength type=”<span style=
"color: blue">full</span>”&gt;
&lt;timeFormat&gt;
&lt;displayName&gt;<span style=
"color: blue">DIN 5008 (EN 28601)</span>&lt;/displayName&gt;
&lt;pattern&gt;<span style=
"color: blue">h:mm:ss a z</span>&lt;/pattern&gt;
&lt;/timeFormat&gt;
&lt;/timeFormatLength&gt;
&lt;timeFormatLength type="<span style=
"color: blue">medium</span>"&gt;
&lt;timeFormat&gt;
&lt;pattern&gt;<span style=
"color: blue">h:mm:ss a</span>&lt;/pattern&gt;
&lt;/timeFormat&gt;
&lt;/timeFormatLength&gt;
&lt;/timeFormats&gt;</pre>
<p>The preference of 12 hour versus 24 hour for the locale can
be derived from the <a href="#Time_Data">Time Data</a>. If the
preferred hour symbol is 'h' or 'K'
then the format is 12 hour; otherwise it is 24 hour. Formats
with 'h' or 'K' must also include a field with one of the day
period pattern characters: 'a', 'b', or 'B'.</p>
<p>To account for customary usage in some countries, APIs
should allow for formatting times that go beyond 23:59:59. For
example, in some countries it would be customary to indicate
that opening hours extending from <em>Friday at 7pm</em> to
<em>Saturday at 2am</em> in a format like the following:</p>
<p style="text-align: center">Friday: 19:00 – 26:00</p>
<p>Time formats use the specific non-location format (z or
zzzz) for the time zone name. This is the format that should be
used when formatting a specific time for presentation. When
formatting a time referring to a recurring time (such as a
meeting in a calendar), applications should substitute the
generic non-location format (v or vvvv) for the time zone in
the time format pattern. See <i><a href=
"#Using_Time_Zone_Names">Using Time Zone Names</a>.</i> for a
complete description of available time zone formats and their
uses.</p>
<h3>2.6 <a name="dateTimeFormats" href="#dateTimeFormats" id=
"dateTimeFormats">Element dateTimeFormats</a></h3>
<p class="dtd">&lt;!ELEMENT dateTimeFormats (alias | (default*,
dateTimeFormatLength*, availableFormats*, appendItems*,
intervalFormats*, special*)) &gt;<br></p>
<p>Date/Time formats have the following form:</p>
<pre> &lt;dateTimeFormats&gt;
&lt;dateTimeFormatLength type=”<span style=
"color: blue">long</span>”&gt;
&lt;dateTimeFormat&gt;
&lt;pattern&gt;{1} 'at' {0}&lt;/pattern&gt;
&lt;/dateTimeFormat&gt;
&lt;/dateTimeFormatLength&gt;
&lt;dateTimeFormatLength type=”<span style=
"color: blue">medium</span>”&gt;
&lt;dateTimeFormat&gt;
&lt;pattern&gt;{1}, {0}&lt;/pattern&gt;
&lt;/dateTimeFormat&gt;
&lt;/dateTimeFormatLength&gt;
&lt;availableFormats&gt;
&lt;dateFormatItem id="Hm"&gt;<span style=
"color: blue">HH:mm</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="Hms"&gt;<span style=
"color: blue">HH:mm:ss</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="M"&gt;<span style=
"color: blue">L</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="MEd"&gt;<span style=
"color: blue">E, M/d</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="MMM"&gt;<span style=
"color: blue">LLL</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="MMMEd"&gt;<span style=
"color: blue">E, MMM d</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="MMMMEd"&gt;<span style=
"color: blue">E, MMMM d</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="MMMMd"&gt;<span style=
"color: blue">MMMM d</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="MMMd"&gt;<span style=
"color: blue">MMM d</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="Md"&gt;<span style=
"color: blue">M/d</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="d"&gt;<span style=
"color: blue">d</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="hm"&gt;<span style=
"color: blue">h:mm a</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="ms"&gt;<span style=
"color: blue">mm:ss</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="y"&gt;<span style=
"color: blue">yyyy</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="yM"&gt;<span style=
"color: blue">M/yyyy</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="yMEd"&gt;<span style=
"color: blue">EEE, M/d/yyyy</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="yMMM"&gt;<span style=
"color: blue">MMM yyyy</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="yMMMEd"&gt;<span style=
"color: blue">EEE, MMM d, yyyy</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="yMMMM"&gt;<span style=
"color: blue">MMMM yyyy</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="yQ"&gt;<span style=
"color: blue">Q yyyy</span>&lt;/dateFormatItem&gt;
&lt;dateFormatItem id="yQQQ"&gt;<span style=
"color: blue">QQQ yyyy</span>&lt;/dateFormatItem&gt;
. . .
&lt;/availableFormats&gt;
&lt;appendItems&gt;
&lt;appendItem request="<span style=
"color: blue">G</span>"&gt;<span style=
"color: blue">{0} {1}</span>&lt;/appendItem&gt;
&lt;appendItem request="<span style=
"color: blue">w</span>"&gt;<span style=
"color: blue">{0} ({2}: {1})</span>&lt;/appendItem&gt;
. . .
&lt;/appendItems&gt;
&lt;/dateTimeFormats&gt;</pre>
<pre> &lt;/calendar&gt;
&lt;calendar type="<span style="color: blue">buddhist</span>"&gt;
&lt;eras&gt;
&lt;eraAbbr&gt;
&lt;era type="<span style=
"color: blue">0</span>"&gt;<span style=
"color: blue">BE</span>&lt;/era&gt;
&lt;/eraAbbr&gt;
&lt;/eras&gt;
&lt;/calendar&gt;</pre>
<p>These formats allow for date and time formats to be composed
in various ways.</p>
<h4>2.6.1 <a name="dateTimeFormat" href="#dateTimeFormat" id=
"dateTimeFormat">Element dateTimeFormat</a></h4>
<p class="dtd">&lt;!ELEMENT dateTimeFormatLength (alias |
(default*, dateTimeFormat*, special*))&gt;<br>
&lt;!ATTLIST dateTimeFormatLength type ( full | long | medium |
short ) #IMPLIED &gt;<br>
&lt;!ELEMENT dateTimeFormat (alias | (pattern*, displayName*,
special*))&gt;</p>
<p>The dateTimeFormat element works like the dateFormats and
timeFormats, except that the pattern is of the form "{1} {0}",
where {0} is replaced by the time format, and {1} is replaced
by the date format, with results such as "8/27/06 7:31 AM".
Except for the substitution markers {0} and {1}, text in the
dateTimeFormat is interpreted as part of a date/time pattern,
and is subject to the same rules described in <a href=
"#Date_Format_Patterns">Date Format Patterns</a>. This includes
the need to enclose ASCII letters in single quotes if they are
intended to represent literal text.</p>
<p>When combining a standard date pattern with a standard time
pattern, the type of dateTimeFormat used to combine them is
determined by the type of the date pattern. For example:</p>
<table cellspacing="0" cellpadding="4" border="1">
<caption>
<a name="Date_Time_Combination_Examples" href=
"#Date_Time_Combination_Examples" id=
"Date_Time_Combination_Examples">Date-Time Combination
Examples</a>
</caption>
<tr>
<th>Date-Time Combination</th>
<th>dateTimeFormat</th>
<th>Results</th>
</tr>
<tr>
<td>full date + short time</td>
<td>full, e.g. "{1} 'at' {0}"</td>
<td>Wednesday, September 18, 2013 at 4:30 PM</td>
</tr>
<tr>
<td>medium date + long time</td>
<td>medium, e.g. "{1}, {0}"</td>
<td>Sep 18, 2013, 4:30:00 PM PDT</td>
</tr>
</table>
<h4>2.6.2 <a name="availableFormats_appendItems" href=
"#availableFormats_appendItems" id=
"availableFormats_appendItems">Elements availableFormats,
appendItems</a></h4>
<p class="dtd">&lt;!ELEMENT availableFormats (alias |
(dateFormatItem*, special*))&gt;<br>
&lt;!ELEMENT dateFormatItem ( #PCDATA ) &gt;<br>
&lt;!ATTLIST dateFormatItem id CDATA #REQUIRED &gt;</p>
<p>The availableFormats element and its subelements provide a
more flexible formatting mechanism than the predefined list of
patterns represented by dateFormatLength, timeFormatLength, and
dateTimeFormatLength. Instead, there is an open-ended list of
patterns (represented by dateFormatItem elements as well as the
predefined patterns mentioned above) that can be matched
against a requested set of calendar fields and field lengths.
Software can look through the list and find the pattern that
best matches the original request, based on the desired
calendar fields and lengths. For example, the full month and
year may be needed for a calendar application; the request is
MMMMyyyy, but the best match may be "y MMMM" or even "G yy
MMMM", depending on the locale and calendar.</p>
<p>For some calendars, such as Japanese, a displayed year must
have an associated era, so for these calendars dateFormatItem
patterns with a year field should also include an era field.
When matching availableFormats patterns: If a client requests a
format string containing a year, and all the availableFormats
patterns with a year also contain an era, then include the era
as part of the result.</p>
<p>The id attribute is a so-called "skeleton", containing only
field information, and in a canonical order. Examples are
"yMMMM" for year + full month, or "MMMd" for abbreviated month
+ day. In particular:</p>
<ul>
<li>The fields are from the <a href=
"#Date_Field_Symbol_Table">Date Field Symbol Table</a> in
<i><a href="#Date_Format_Patterns">Date Format
Patterns</a></i>.</li>
<li>The canonical order is from top to bottom in that table;
that is, "yM" not "My".</li>
<li>Only one field of each type is allowed; that is, "Hh" is
not valid.</li>
</ul>
<p>In order to support user overrides of default locale
behavior, data should be supplied for both 12-hour-cycle time
formats (using h or K) and 24-hour-cycle time formats (using H
or k), even if one of those styles is not commonly used; the
locale's actual preference for 12-hour or 24-hour time cycle is
determined from the <a
href="#Time_Data">Time Data</a> as described above in
<a href="#timeFormats">timeFormats</a>. Thus skeletons
using h or K should have patterns that only use h or K for
hours, while skeletons using H or k should have patterns that
only use H or k for hours.</p>
<p>The rules governing use of day period pattern characters in
patterns and skeletons are as follows:</p>
<ul>
<li>Patterns and skeletons for 24-hour-cycle time formats
(using H or k) currently <em>should not</em> include fields
with day period characters (a, b, or B); these pattern
characters should be ignored if they appear in skeletons.
However, in the future, CLDR may allow use of B (but not a or
b) in 24-hour-cycle time formats.</li>
<li>Patterns for 12-hour-cycle time formats (using h or K)
<em>must</em> include a day period field using one of a, b,
or B.</li>
<li>Skeletons for 12-hour-cycle time formats (using h or K)
<em>may</em> include a day period field using one of a, b, or
B. If they do not, the skeleton will be treated as implicitly
containing a.</li>
</ul>
<p>Locales should generally provide availableFormats data for a
fairly complete set of time skeletons without B, typically the
following:</p><code>H, h, Hm, hm, Hms, hms, Hmv, hmv, Hmsv,
hmsv</code>
<p>Locales that use 12-hour-cycle time formats with B may
provide availableFormats data for a smaller set of time
skeletons with B, for example:</p><code>Bh, Bhm, Bhms</code>
<p>When matching a requested skeleton containing b or B to the
skeletons actually available in the data, if there is no
skeleton matching the specified day period field, then find a
match in which the b or B matches an explicit or implicit 'a'
in the skeleton, but replace the 'a' in the corresponding
pattern with the requested day period b or B. The following
table illustrates how requested skeletons map to patterns with
different sets of availableFormats data:</p>
<table cellspacing="0" cellpadding="4" border="1">
<caption>
<a name="Mapping_Requested_Time_Skeletons_To_Patterns"
href="#Mapping_Requested_Time_Skeletons_To_Patterns" id=
"Mapping_Requested_Time_Skeletons_To_Patterns">Mapping
Requested Time Skeletons To Patterns</a>
</caption>
<tr>
<th></th>
<th colspan="2">results for different availableFormats data
sets</th>
</tr>
<tr>
<th>requested skeleton</th>
<th>set 1:<br>
...id="H"&gt;H&lt;/date...<br>
...id="h"&gt;h a&lt;/date...</th>
<th>set 2:<br>
...id="H"&gt;H&lt;/date...<br>
...id="h"&gt;h a&lt;/date...<br>
...id="Bh"&gt;B h&lt;/date...</th>
</tr>
<tr>
<td>"h" (or "ah")</td>
<td>"h a"</td>
<td>"h a"</td>
</tr>
<tr>
<td>"bh"</td>
<td>"h b"</td>
<td>"h b"</td>
</tr>
<tr>
<td>"Bh"</td>
<td>"h B"</td>
<td>"B h"</td>
</tr>
<tr>
<td>"H" (or "aH", "bH", "BH")</td>
<td>"H"</td>
<td>"H"</td>
</tr>
</table><br>
<p>The hour input skeleton symbols 'j', 'J', and 'C' can be
used to select the best hour format (h, H, …) before
processing, and the appropriate dayperiod format (a, b, B)
after a successful match that contains an 'a' symbol.</p>
<p>The dateFormatItems inherit from their parent locale, so the
inherited items need to be considered when processing.</p>
<h5><a name="Matching_Skeletons" href="#Matching_Skeletons" id=
"Matching_Skeletons">2.6.2.1 Matching Skeletons</a></h5>
<p>It is not necessary to supply dateFormatItems with skeletons
for every field length; fields in the skeleton and pattern are
expected to be expanded in parallel to handle a request.</p>
<p>Typically a “best match” is found using a closest distance
match, such as:</p>
<ol>
<li>Symbols requesting a best choice for the locale are
replaced.
<ul>
<li>j → one of {H, k, h, K}; C → one of {a, b, B}</li>
</ul>
</li>
<li>For fields with symbols representing the same type (year,
month, day, etc):
<ol>
<li>Most symbols have a small distance from each other.
<ul>
<li>M ≅ L; E ≅ c; a ≅ b ≅ B; H ≅ k ≅ h ≅ K; ...</li>
</ul>
</li>
<li>Width differences among fields, other than those
marking text vs numeric, are given small distance from
each other.
<ul>
<li>MMM ≅ MMMM</li>
<li>MM ≅ M</li>
</ul>
</li>
<li>Numeric and text fields are given a larger distance
from each other.
<ul>
<li>MMM ≈ MM</li>
</ul>
</li>
<li>Symbols representing substantial differences (week of
year vs week of month) are given much larger a distances
from each other.
<ul>
<li>d ≋ D; ...</li>
</ul>
</li>
</ol>
</li>
<li>A requested skeleton that includes both seconds and
fractional seconds (e.g. “mmssSSS”) is allowed to match a
dateFormatItem skeleton that includes seconds but not
fractional seconds (e.g. “ms”). In this case the requested
sequence of ‘S’ characters (or its length) should be retained
separately and used when adjusting the pattern, as described
below.</li>
<li>Otherwise, missing or extra fields cause a match to fail.
(But see <strong><a href="#Missing_Skeleton_Fields">Missing
Skeleton Fields</a></strong> below).</li>
</ol>
<p>Once a skeleton match is found, the corresponding pattern is
used, but with adjustments. Consider the following
dateFormatItem:</p>
<pre> &lt;dateFormatItem id="yMMMd"&gt;<span style=
"color: blue">d MMM y</span>&lt;/dateFormatItem&gt;
</pre>
<p>If this is the best match for yMMMMd, pattern is
automatically expanded to produce the pattern
"d&nbsp;MMMM&nbsp;y" in response to the request. Of course, if
the desired behavior is that a request for yMMMMd should
produce something <i>other</i> than "d&nbsp;MMMM&nbsp;y", a
separate dateFormatItem must be present, for example:</p>
<pre> &lt;dateFormatItem id="yMMMMd"&gt;<span style=
"color: blue">d 'de' MMMM 'de' y</span>&lt;/dateFormatItem&gt;</pre>
<p>However, such automatic expansions should never convert a
numeric element in the pattern to an alphabetic element.
Consider the following dateFormatItem:</p>
<pre>
&lt;dateFormatItem id="yMMM"&gt;y年M月&lt;/dateFormatItem&gt;</pre>
<p>If this is the best match for a requested skeleton yMMMM,
automatic expansion should not produce a corresponding pattern
“y年MMMM月”; rather, since “y年M月” specifies a numeric month M,
automatic expansion should not modify the pattern, and should
produce “y年M月” as the match for requested skeleton yMMMM.</p>
<p>If the requested skeleton included both seconds and
fractional seconds and the dateFormatItem skeleton included
seconds but not fractional seconds, then the seconds field of
the corresponding pattern should be adjusted by appending the
locale’s decimal separator, followed by the sequence of ‘S’
characters from the requested skeleton.</p>
<h5><a name="Missing_Skeleton_Fields" href=
"#Missing_Skeleton_Fields" id="Missing_Skeleton_Fields">2.6.2.2
Missing Skeleton Fields</a></h5>
<p>If a client-requested set of fields includes both date and
time fields, and if the availableFormats data does not include
a dateFormatItem whose skeleton matches the same set of fields,
then the request should be handled as follows:</p>
<ol>
<li>Divide the request into a date fields part and a time
fields part.</li>
<li>For each part, find the matching dateFormatItem, and
expand the pattern as above.</li>
<li>Combine the patterns for the two dateFormatItems using
the appropriate dateTimeFormat pattern, determined as follows
from the requested date fields:
<ul>
<li>If the requested date fields include wide month
(MMMM, LLLL) and weekday name of any length (e.g. E,
EEEE, c, cccc), use
&lt;dateTimeFormatLength&nbsp;type="full"&gt;</li>
<li>Otherwise, if the requested date fields include wide
month, use
&lt;dateTimeFormatLength&nbsp;type="long"&gt;</li>
<li>Otherwise, if the requested date fields include
abbreviated month (MMM, LLL), use
&lt;dateTimeFormatLength&nbsp;type="medium"&gt;</li>
<li>Otherwise use &lt;dateTimeFormatLength
type="short"&gt;</li>
</ul>
</li>
</ol>
<p class="dtd">&lt;!ELEMENT appendItems (alias | (appendItem*,
special*))&gt;<br>
&lt;!ELEMENT appendItem ( #PCDATA ) &gt;<br>
&lt;!ATTLIST appendItem request CDATA &gt;</p>
<p>In case the best match does not include all the requested
calendar fields, the appendItems element describes how to
append needed fields to one of the existing formats. Each
appendItem element covers a single calendar field. In the
pattern, {0} represents the format string, {1} the data content
of the field, and {2} the display name of the field (see
<a href="#Calendar_Fields">Calendar Fields</a>).</p>
<h4>2.6.3 <a name="intervalFormats" href="#intervalFormats" id=
"intervalFormats">Element intervalFormats</a></h4>
<p class="dtd">&lt;!ELEMENT intervalFormats (alias |
(intervalFormatFallback*, intervalFormatItem*, special*))
&gt;</p>
<p class="dtd">&lt;!ELEMENT intervalFormatFallback ( #PCDATA )
&gt;</p>
<p class="dtd">&lt;!ELEMENT intervalFormatItem (alias |
(greatestDifference*, special*)) &gt;<br>
&lt;!ATTLIST intervalFormatItem id NMTOKEN #REQUIRED &gt;</p>
<p class="dtd">&lt;!ELEMENT greatestDifference ( #PCDATA )
&gt;<br>
&lt;!ATTLIST greatestDifference id NMTOKEN #REQUIRED &gt;</p>
<p>Interval formats allow for software to format intervals like
"Jan 10-12, 2008" as a shorter and more natural format than
"Jan 10, 2008 - Jan 12, 2008". They are designed to take a
"skeleton" pattern (like the one used in availableFormats) plus
start and end datetime, and use that information to produce a
localized format.</p>
<p>The data supplied in CLDR requires the software to determine
the calendar field with the greatest difference before using
the format pattern. For example, the greatest difference in
"Jan 10-12, 2008" is the day field, while the greatest
difference in "Jan 10 - Feb 12, 2008" is the month field. This
is used to pick the exact pattern. The pattern is then designed
to be broken up into two pieces by determining the first
repeating field. For example, "MMM d-d, y" would be broken up
into "MMM d-" and "d, y". The two parts are formatted with the
first and second datetime, as described in more detail
below.</p>
<p>In case there is no matching pattern, the
intervalFormatFallback defines the fallback pattern. The
fallback pattern is of the form "{0} - {1}" or "{1} - {0}",
where {0} is replaced by the start datetime, and {1} is
replaced by the end datetime. The fallback pattern determines
the default order of the interval pattern. "{0} - {1}" means
the first part of the interval patterns in current local are
formatted with the start datetime, while "{1} - {0}" means the
first part of the interval patterns in current locale are
formatted with the end datetime.</p>
<p>The id attribute of intervalFormatItem is the "skeleton"
pattern (like the one used in availableFormats) on which the
format pattern is based. The id attribute of greatestDifference
is the calendar field letter, for example 'M', which is the
greatest difference between start and end datetime.</p>
<p>The greatest difference defines a specific interval pattern
of start and end datetime on a "skeleton" and a
greatestDifference. As stated above, the interval pattern is
designed to be broken up into two pieces. Each piece is similar
to the pattern defined in date format. Also, each interval
pattern could override the default order defined in fallback
pattern. If an interval pattern starts with "latestFirst:", the
first part of this particular interval pattern is formatted
with the end datetime. If an interval pattern starts with
"earliestFirst:", the first part of this particular interval
pattern is formatted with the start datetime. Otherwise, the
order is the same as the order defined in
intervalFormatFallback.</p>
<p>For example, the English rules that produce "Jan 10–12,
2008", "Jan 10 – Feb 12, 2008", and "Jan 10, 2008 – Feb. 12,
2009" are as follows:</p>
<p class="example">&lt;intervalFormatItem id="yMMMd"&gt;<br>
&lt;greatestDifference id="M"&gt;MMM d – MMM d,
yyyy&lt;/greatestDifference&gt;<br>
&lt;greatestDifference id="d"&gt;MMM d–d,
yyyy&lt;/greatestDifference&gt;<br>
&lt;greatestDifference id="y"&gt;MMM d, yyyy – MMM d,
yyyy&lt;/greatestDifference&gt;<br>
&lt;/intervalFormatItem&gt;</p>
<p>To format a start and end datetime, given a particular
"skeleton":</p>
<ol>
<li>Look for the intervalFormatItem element that matches the
"skeleton", starting in the current locale and then following
the locale fallback chain up to, but not including root
(better results are obtained by following steps 2-6 below
with locale- or language- specific data than by using
matching intervalFormats from root).</li>
<li>If no match was found from the previous step, check what
the closest match is in the fallback locale chain, as in
availableFormats. That is, this allows for adjusting the
string value field's width, including adjusting between "MMM"
and "MMMM", and using different variants of the same field,
such as 'v' and 'z'.</li>
<li>If no match was found from the previous steps and the
skeleton combines date fields such as y,M,d with time fields
such as H,h,m,s, then an intervalFormatItem can be
synthesized as follows:
<ol>
<li>For greatestDifference values corresponding to the
date fields in the skeleton, use the mechanisms described
under <a href=
"#availableFormats_appendItems">availableFormats</a> to
generate the complete date-time pattern corresponding to
the skeleton, and then combine two such patterns using
the intervalFormatFallback pattern (the result will be
the same for each greatestDifference of a day or longer).
For example:<br>
MMMdHm/d → "MMM d 'at' H:mm – MMM d 'at' H:mm" → "Jan 3
at 9:00 – Jan 6 at 11:00"</li>
<li>For greatestDifference values corresponding to the
time fields in the skeleton, separate the skeleton into a
date fields part and a time fields part. Use the
mechanisms described under availableFormats to generate a
date pattern corresponding to the date fields part. Use
the time fields part to look up an intervalFormatItem.
For each greatestDifferent in the intervalFormatItem,
generate a pattern by using the <a href=
"#dateTimeFormat">dateTimeFormat</a> to combine the date
pattern with the intervalFormatItem’s greatestDifference
element value. For example:<br>
MMMdHm/H → "MMM d 'at' H:mm – H:mm" → "Jan 3 at 9:00 –
11:00"</li>
</ol>
</li>
<li>If a match is found from previous steps, compute the
calendar field with the greatest difference between start and
end datetime. If there is no difference among any of the
fields in the pattern, format as a single date using
availableFormats, and return.</li>
<li>Otherwise, look for greatestDifference element that
matches this particular greatest difference.</li>
<li>If there is a match, use the pieces of the corresponding
pattern to format the start and end datetime, as above.</li>
<li>Otherwise, format the start and end datetime using the
fallback pattern.</li>
</ol>
<h2>3 <a name="Calendar_Fields" href="#Calendar_Fields" id=
"Calendar_Fields">Calendar Fields</a></h2>
<p class="dtd">&lt;!ELEMENT fields ( alias | (field*,
special*)) &gt;<br>
&lt;!ELEMENT field ( alias | (displayName*, relative*,
relativeTime*, relativePeriod*, special*)) &gt;<br>
&lt;!ATTLIST field type ( era | era-short | era-narrow | year |
year-short | year-narrow | quarter | quarter-short |
quarter-narrow | month | month-short | month-narrow | week |
week-short | week-narrow | weekOfMonth | weekOfMonth-short |
weekOfMonth-narrow | day | day-short | day-narrow | dayOfYear |
dayOfYear-short | dayOfYear-narrow | weekday | weekday-short |
weekday-narrow | weekdayOfMonth | weekdayOfMonth-short |
weekdayOfMonth-narrow | sun | sun-short | sun-narrow | mon |
mon-short | mon-narrow | tue | tue-short | tue-narrow | wed |
wed-short | wed-narrow | thu | thu-short | thu-narrow | fri |
fri-short | fri-narrow | sat | sat-short | sat-narrow |
dayperiod | dayperiod-short | dayperiod-narrow | hour |
hour-short | hour-narrow | minute | minute-short |
minute-narrow | second | second-short | second-narrow | zone |
zone-short | zone-narrow ) #IMPLIED &gt;</p>
<p class="dtd">&lt;!ELEMENT relative (#PCDATA) &gt;<br>
&lt;!ATTLIST relative type NMTOKEN #IMPLIED &gt;</p>
<p class="dtd">&lt;!ELEMENT relativeTime ( alias |
(relativeTimePattern*, special*)) &gt;<br>
&lt;!ATTLIST relativeTime type NMTOKEN #REQUIRED &gt;</p>
<p class="dtd">&lt;!ELEMENT relativeTimePattern ( #PCDATA )
&gt;<br>
&lt;!ATTLIST relativeTimePattern count ( zero | one | two | few
| many | other ) #REQUIRED &gt;</p>
<p class="dtd">&lt;!ELEMENT relativePeriod (#PCDATA) &gt;</p>
<p>Translations may be supplied for names of calendar fields
(elements of a calendar, such as Day, Month, Year, Hour, and so
on), and for relative values for those fields (for example, the
day with relative value -1 is "Yesterday"). There are four
types of translations; some are only relevant or useful for
certain types of fields:</p>
<ul>
<li>&lt;displayName&gt; General display name for the field
type. This should be relevant for all elements, including
those like era and zone that might not have useful forms for
the other name types. These are typically presented in
titlecase (eg “Day”) since they are intended as labels in a
UI.</li>
<li>&lt;relative&gt; Display names for the current instance
of the field, and one or two past and future instances. In
English, data is provided for year, quarter, month, week,
day, specific days of the week (sun, mon, tue, …), and—with
offset 0 only—for hour, minute, and second.</li>
<li>&lt;relativeTime&gt; Display names for an instance of the
field that is a counted number of units in the past or the
future relative to the current instance; this needs plural
forms. In English, data is provided for year, quarter, month,
week, day, specific days of the week, ,hour, minute, and
second.</li>
<li>&lt;relativePeriod&gt; Pattern for designating an
instance of the specified field in relation to some other
date reference. This is currently only used for weeks, and
provides a pattern such as “the week of {0}” which can be
used to generate designations such as “the week of April 11,
2016” or “the week of April 11–15”.</li>
</ul>
<p>Where there is not a convenient, customary word or phrase in
a particular language for a particular type of relative value,
it should be omitted.</p>
<p>Examples, first for English:</p>
<pre> &lt;fields&gt;
&lt;field type="day"&gt;
&lt;displayName&gt;Day&lt;/displayName&gt;
&lt;relative type="-1"&gt;yesterday&lt;/relative&gt;
&lt;relative type="0"&gt;today&lt;/relative&gt;
&lt;relative type="1"&gt;tomorrow&lt;/relative&gt;
&lt;relativeTime type="future"&gt;
&lt;relativeTimePattern count="one"&gt;in {0} day&lt;/relativeTimePattern&gt;
&lt;relativeTimePattern count="other"&gt;in {0} days&lt;/relativeTimePattern&gt;
&lt;/relativeTime&gt;
&lt;relativeTime type="past"&gt;
&lt;relativeTimePattern count="one"&gt;{0} day ago&lt;/relativeTimePattern&gt;
&lt;relativeTimePattern count="other"&gt;{0} days ago&lt;/relativeTimePattern&gt;
&lt;/relativeTime&gt;
&lt;/field&gt;
&lt;field type="weekday"&gt;
&lt;displayName&gt;Day of the Week&lt;/displayName&gt;
&lt;/field&gt;
&lt;field type="sun"&gt;
&lt;relative type="-1"&gt;last Sunday&lt;/relative&gt;
&lt;relative type="0"&gt;this Sunday&lt;/relative&gt;
&lt;relative type="1"&gt;next Sunday&lt;/relative&gt;
&lt;relativeTime type="future"&gt;
&lt;relativeTimePattern count="one"&gt;in {0} Sunday&lt;/relativeTimePattern&gt;
&lt;relativeTimePattern count="other"&gt;in {0} Sundays&lt;/relativeTimePattern&gt;
&lt;/relativeTime&gt;
&lt;relativeTime type="past"&gt;
&lt;relativeTimePattern count="one"&gt;{0} Sunday ago&lt;/relativeTimePattern&gt;
&lt;relativeTimePattern count="other"&gt;{0} Sundays ago&lt;/relativeTimePattern&gt;
&lt;/relativeTime&gt;
&lt;/field&gt;
&lt;field type="hour"&gt;
&lt;displayName&gt;Hour&lt;/displayName&gt;
&lt;relative type="0"&gt;now&lt;/relative&gt;
&lt;relativeTime type="future"&gt;
&lt;relativeTimePattern count="one"&gt;in {0} hour&lt;/relativeTimePattern&gt;
&lt;relativeTimePattern count="other"&gt;in {0} hours&lt;/relativeTimePattern&gt;
&lt;/relativeTime&gt;
&lt;relativeTime type="past"&gt;
&lt;relativeTimePattern count="one"&gt;{0} hour ago&lt;/relativeTimePattern&gt;
&lt;relativeTimePattern count="other"&gt;{0} hours ago&lt;/relativeTimePattern&gt;
&lt;/relativeTime&gt;
&lt;/field&gt;
&lt;/fields&gt;
</pre>
<p>Second, for German; includes relative type="-2"/"2", present
in the English example:</p>
<pre> &lt;fields&gt;
&lt;field type="day"&gt;
&lt;displayName&gt;Tag&lt;/displayName&gt;
&lt;relative type="-2"&gt;Vorgestern&lt;/relative&gt;
&lt;relative type="-1"&gt;Gestern&lt;/relative&gt;
&lt;relative type="0"&gt;Heute&lt;/relative&gt;
&lt;relative type="1"&gt;Morgen&lt;/relative&gt;
&lt;relative type="2"&gt;Übermorgen&lt;/relative&gt;
&lt;relativeTime type="future"&gt;
&lt;relativeTimePattern count="one"&gt;In {0} Tag&lt;/relativeTimePattern&gt;
&lt;relativeTimePattern count="other"&gt;In {0} Tagen&lt;/relativeTimePattern&gt;
&lt;/relativeTime&gt;
&lt;relativeTime type="past"&gt;
&lt;relativeTimePattern count="one"&gt;Vor {0} Tag&lt;/relativeTimePattern&gt;
&lt;relativeTimePattern count="other"&gt;Vor {0} Tagen&lt;/relativeTimePattern&gt;
&lt;/relativeTime&gt;
&lt;/field&gt;
&lt;/fields&gt;
</pre>
<p>A special name for “now” is indicated using &lt;relative
type="0"&gt; for the "second" field. For example, in
English:</p>
<pre> &lt;field type="second"&gt;
&lt;displayName&gt;Second&lt;/displayName&gt;
&lt;relative type="0"&gt;now&lt;/relative&gt;
&lt;/field&gt;</pre>
<p>Different widths can be supplied for certain fields, such
as:</p>
<pre>
&lt;field type="<strong>year-short</strong>"&gt;<br> &lt;displayName&gt;yr.&lt;/displayName&gt;<br> &lt;relative type="-1"&gt;last yr.&lt;/relative&gt;<br> &lt;relative type="0"&gt;this yr.&lt;/relative&gt;<br> &lt;relative type="1"&gt;next yr.&lt;/relative&gt;<br> &lt;relativeTime type="future"&gt;<br> &lt;relativeTimePattern count="one"&gt;in {0} yr.&lt;/relativeTimePattern&gt;<br> &lt;relativeTimePattern count="other"&gt;in {0} yr.&lt;/relativeTimePattern&gt;<br> &lt;/relativeTime&gt;<br> &lt;relativeTime type="past"&gt;<br> &lt;relativeTimePattern count="one"&gt;{0} yr. ago&lt;/relativeTimePattern&gt;<br> &lt;relativeTimePattern count="other"&gt;{0} yr. ago&lt;/relativeTimePattern&gt;<br> &lt;/relativeTime&gt;<br>&lt;/field&gt;</pre>
<p>As in other cases, <strong>narrow</strong> may be ambiguous
out of context.</p>
<h2>4 <a name="Supplemental_Calendar_Data" href=
"#Supplemental_Calendar_Data" id=
"Supplemental_Calendar_Data">Supplemental Calendar
Data</a></h2>
<h3>4.1 <a name="Calendar_Data" href="#Calendar_Data" id=
"Calendar_Data">Calendar Data</a></h3>
<p class="dtd">&lt;!ELEMENT calendarData ( calendar* )&gt;<br>
&lt;!ELEMENT calendar ( calendarSystem?, eras? )&gt;<br>
&lt;!ATTLIST calendar type NMTOKENS #REQUIRED&gt;<br>
&lt;!ATTLIST calendar territories NMTOKENS #IMPLIED &gt;
&lt;!-- deprecated, replaced by calendarPreferenceData
--&gt;</p>
<p class="dtd">&lt;!ELEMENT calendarSystem EMPTY&gt;<br>
&lt;!ATTLIST calendarSystem type (solar | lunar | lunisolar |
other) #REQUIRED&gt;</p>
<p class="dtd">&lt;!ELEMENT eras ( era* )&gt;</p>
<p class="dtd">&lt;!ELEMENT era EMPTY&gt;<br>
&lt;!ATTLIST era type NMTOKENS #REQUIRED&gt;<br>
&lt;!ATTLIST era start CDATA #IMPLIED&gt;<br>
&lt;!ATTLIST era end CDATA #IMPLIED&gt;</p>
<p>The &lt;calendarData&gt; element now provides only
locale-independent data about calendar behaviors via its
&lt;calendar&gt; subelements, which for each calendar can
specify the astronomical basis of the calendar (solar, lunar,
etc.) and the date ranges for its eras.</p>
<p>Era start or end dates are specified in terms of the
equivalent proleptic Gregorian date (in "y-M-d" format). Eras
may be open-ended, with unspecified start or end dates. For
example, here are the eras for the Gregorian calendar:</p>
<pre> &lt;era type="0" end="0" /&gt;
&lt;era type="1" start="1" /&gt;
</pre>
<p>For a sequence of eras with specified start dates, the end
of each era need not be explicitly specified (it is assumed to
match the start of the subsequent era). For example, here are
the first few eras for the Japanese calendar:</p>
<pre> &lt;era type="0" start="645-6-19"/&gt;
&lt;era type="1" start="650-2-15"/&gt;
&lt;era type="2" start="672-1-1"/&gt;
</pre>
<p><b>Note:</b> The territories attribute in the calendar
element is deprecated. It was formerly used to indicate
calendar preference by territory, but this is now given by the
<i><a href="#Calendar_Preference_Data">Calendar Preference
Data</a></i> below.</p>
<h3>4.2 <a name="Calendar_Preference_Data" href=
"#Calendar_Preference_Data" id=
"Calendar_Preference_Data">Calendar Preference Data</a></h3>
<p class="dtd">&lt;!ELEMENT calendarPreferenceData (
calendarPreference* ) &gt;<br>
&lt;!ELEMENT calendarPreference EMPTY &gt;<br>
&lt;!ATTLIST calendarPreference territories NMTOKENS #REQUIRED
&gt;<br>
&lt;!ATTLIST calendarPreference ordering NMTOKENS #REQUIRED
&gt;</p>
<p>The calendarPreference element provides a list of commonly
used calendar types in a territory. The ordering attribute
indicates the list of calendar types in preferred order. The
first calendar type in the list is the default calendar type
for the territory. For example:</p>
<pre>
&lt;calendarPreference territories="001" ordering="gregorian"/&gt;
&lt;calendarPreference territories="JP" ordering="gregorian japanese"/&gt;
&lt;calendarPreference territories="TH" ordering="buddhist gregorian"/&gt;
</pre>
<p>The calendarPreference elements above indicate:</p>
<ul>
<li>The default (for territory "001") is that only the
Gregorian calendar is commonly used.</li>
<li>For Japan, the Gregorian and Japanese calendars are both
used, with Gregorian preferred (the default).</li>
<li>For Thailand, the Buddhist and Gregorian calendars are
both used, and Buddhist is preferred (the default).</li>
</ul>
<p>The calendars in common use for a locale should typically be
shown in UIs that provide a choice of calendars. (An 'Other...'
button could give access to the other available calendars.)</p>
<h3>4.3 <a name="Week_Data" href="#Week_Data" id=
"Week_Data">Week Data</a></h3>
<p class="dtd">&lt;!ELEMENT weekData ( minDays*, firstDay*,
weekendStart*, weekendEnd*, weekOfPreference* )&gt;</p>
<p class="dtd">&lt;!ELEMENT minDays EMPTY&gt;<br>
&lt;!ATTLIST minDays count (1 | 2 | 3 | 4 | 5 | 6 | 7)
#REQUIRED&gt;<br>
&lt;!ATTLIST minDays territories NMTOKENS #REQUIRED&gt;</p>
<p class="dtd">&lt;!ELEMENT firstDay EMPTY &gt;<br>
&lt;!ATTLIST firstDay day (sun | mon | tue | wed | thu | fri |
sat) #REQUIRED&gt;<br>
&lt;!ATTLIST firstDay territories NMTOKENS #REQUIRED&gt;</p>
<p class="dtd">&lt;!ELEMENT weekendStart EMPTY&gt;<br>
&lt;!ATTLIST weekendStart day (sun | mon | tue | wed | thu |
fri | sat) #REQUIRED&gt;<br>
&lt;!ATTLIST weekendStart territories NMTOKENS
#REQUIRED&gt;</p>
<p class="dtd">&lt;!ELEMENT weekendEnd EMPTY&gt;<br>
&lt;!ATTLIST weekendEnd day (sun | mon | tue | wed | thu | fri
| sat) #REQUIRED&gt;<br>
&lt;!ATTLIST weekendEnd territories NMTOKENS #REQUIRED&gt;</p>
<p class="dtd">&lt;!ELEMENT weekOfPreference EMPTY&gt;<br>
&lt;!ATTLIST weekOfPreference locales NMTOKENS
#REQUIRED&gt;<br>
&lt;!ATTLIST weekOfPreference ordering NMTOKENS
#REQUIRED&gt;</p>
<p>These values provide territory-specific information needed
for week-of-year and week-of-month calculations, as well as
information on conventions for first day of the week, for
weekends, and for week designations. For most elements, the
default is provided by the element with territories="001"; for
weekOfPreference elements the default is provided by the
element with locales="und".</p>
<pre>&lt;weekData&gt;
&lt;minDays count="1" territories="001"/&gt;
&lt;minDays count="4" territories="AD AN AT AX BE BG CH CZ DE DK EE ES FI FJ FO FR GB …"/&gt;
&lt;firstDay day="mon" territories="001"/&gt;
&lt;firstDay day="fri" territories="BD MV"/&gt;
&lt;firstDay day="sat" territories="AE AF BH DJ DZ EG IQ IR JO …"/&gt;
&lt;weekendStart day="sat" territories="001"/&gt;
&lt;weekendStart day="sun" territories="IN"/&gt;
&lt;weekendStart day="thu" territories="AF DZ IR OM SA YE"/&gt;
&lt;weekendStart day="fri" territories="AE BH EG IL IQ JO KW …"/&gt;
&lt;weekOfPreference ordering="weekOfYear" locales="und"/&gt;
&lt;weekOfPreference ordering="weekOfYear weekOfMonth" locales="am az bs cs cy da el et hi ky lt mk sk ta th"/&gt;
&lt;weekOfPreference ordering="weekOfYear weekOfMonth weekOfInterval" locales="is mn no sv vi"/&gt;
&lt;weekOfPreference ordering="weekOfYear weekOfDate weekOfMonth" locales="fi zh-TW"/&gt;
</pre>
<p>In order for a week to count as the first week of a new year
for week-of-year calculations, it must include at least the
number of days in the new year specified by the minDays value;
otherwise the week will count as the last week of the previous
year (and for week-of-month calculations, minDays also
specifies the minimum number of days in the new month for a
week to count as part of that month).</p>
<p>The day indicated by firstDay is the one that should be
shown as the first day of the week in a calendar view. This is
not necessarily the same as the first day after the weekend (or
the first work day of the week), which should be determined
from the weekend information. Currently, day-of-week numbering
is based on firstDay (that is, day 1 is the day specified by
firstDay), but in the future we may add a way to specify this
separately.</p>
<p>What is meant by the weekend varies from country to country.
It is typically when most non-retail businesses are closed. The
time should not be specified unless it is a well-recognized
part of the day. The weekendStart day defaults to "sat", and
weekendEnd day defaults to "sun". For more information, see
<i><a href="tr35.html#Date_Ranges">Dates and Date
Ranges</a></i>.</p>
<p>Each weekOfPreference element provides, for its specified
locales, an ordered list of the preferred types of week
designations for that set of locales. There are four types of
week designations, each of which makes use of date patterns
available in the locale, as follows:</p>
<table cellspacing="0" cellpadding="4" border="1">
<caption>
<a name="Week_Designation_Types" href=
"#Week_Designation_Types" id="Week_Designation_Types">Week
Designation Types</a>
</caption>
<tr>
<th width="10%">Type</th>
<th width="20%">Examples</th>
<th width="30%">Date Pattern</th>
<th width="40%">Comments</th>
</tr>
<tr>
<td width="10">weekOfYear</td>
<td width="20%">week 15 of 2016</td>
<td width="30%">&lt;dateFormatItem id='yw'
count='one'&gt;'week' w 'of' <span style=
"text-align: center">Y&lt;…</span></td>
<td width="40%" rowspan="2">The <em>week of</em>
construction takes a <strong>count</strong> attribute, just
in case the pattern changes depending on the numeric value.
(In the future, we're likely to add an ordinal value, for
constructions like “3rd week of March”.)<br>
In languages where the month name needs grammatical changes
(aside from just the simple addition of a prefix or
suffix), localizers will typically use a work-around
construction.</td>
</tr>
<tr>
<td width="10%">weekOfMonth</td>
<td width="20%">week 2 of April<br>
2nd week of April</td>
<td width="30%">&lt;dateFormatItem id='MMMMW''
count='one'&gt;'week' W 'of' MMM&lt;…</td>
</tr>
<tr>
<td width="10%">weekOfDate</td>
<td width="20%">the week of April 11, 2016</td>
<td width="30%" rowspan="2">&lt;field
type="week"&gt;&lt;relativePeriod&gt;the week of
{0}&lt;…</td>
<td width="40%" rowspan="2">The date pattern that replaces
{0} is determined separately and may use the first day or
workday of the week, the range of the full week or work
week, etc.</td>
</tr>
<tr>
<td width="10%">weekOfInterval</td>
<td width="20%">the week of April 11–15</td>
</tr>
</table>
<h3>4.4 <a name="Time_Data" href="#Time_Data" id=
"Time_Data">Time Data</a></h3>
<p class="dtd">&lt;!ELEMENT timeData ( hours* ) &gt;<br>
&lt;!ELEMENT hours EMPTY &gt;<br>
&lt;!ATTLIST hours preferred NMTOKEN #REQUIRED &gt;<br>
&lt;!ATTLIST hours allowed NMTOKENS #REQUIRED &gt;<br>
&lt;!ATTLIST hours regions NMTOKENS #REQUIRED &gt;</p>
<p>This element is for data that indicates, for various
regions, the preferred time cycle in the region, as well as all
time cycles that are considered acceptable in the region. The
defaults are those specified for region 001.</p>
<p>There is a single <code>preferred</code> value, and multiple
<code>allowed</code> values. The meanings of the values H, h,
K, k, b and B are defined in <a href=
"#Date_Field_Symbol_Table">Date Field Symbol Table</a>. The
<code>allowed</code> values are in preference order, and are
used with the 'C' hour skeleton pattern symbol.</p>
<p>For example, in the following, RU (Russia) is marked as
using only 24 hour time, and in particular the 24 hour time
that goes from 0..23 (H), rather than from 1..24 (k).</p>
<pre>&lt;timeData&gt;
&lt;hours preferred="H" allowed="H h" regions="001 …"/&gt;
&lt;hours preferred="H" allowed="H K h" regions="JP"/&gt;
&lt;hours preferred="H" allowed="H" regions="IL RU"/&gt;
&lt;hours preferred="h" allowed="H h" regions="AE AG AL … US … ZW"/&gt;
</pre>
<p>The B and b date symbols provide for formats like “3:00 at
night”. When the ‘C’ option is used, the values in
<code>allowed</code> are traversed from first to last, picking
the first available format. For example, in the following a
system that supports hB should choose that as the most
preferred format for the C (not the <code>preferred</code>
value H).</p>
<pre>&lt;hours preferred="H" allowed="hB H" regions="CD"/&gt;
&lt;hours preferred="H" allowed="hB hb h H" regions="KE MM TZ UG"/&gt;
</pre>Some systems may not want to use B and b, even if preferred
for the locale, so for compatibility the <code>preferred</code>
value is limited to {H, h, K, k}, and is the option selected by the
‘j’ date symbol. Thus the <code>preferred</code> value may not be
the same as the first <code>allowed</code> value.
<h3>4.5 <a name="Day_Period_Rule_Sets" href=
"#Day_Period_Rule_Sets" id="Day_Period_Rule_Sets">Day Period
Rule Sets</a></h3>
<p class="dtd">&lt;!ELEMENT dayPeriodRuleSet ( dayPeriodRules*
) &gt;<br>
&lt;!ATTLIST dayPeriodRuleSet type NMTOKEN #IMPLIED &gt;</p>
<p class="dtd">&lt;!ELEMENT dayPeriodRules (dayPeriodRule*)
&gt;<br>
&lt;!ATTLIST dayPeriodRules locales NMTOKENS #REQUIRED &gt;</p>
<p class="dtd">&lt;!ELEMENT dayPeriodRule EMPTY &gt;<br>
&lt;!ATTLIST dayPeriodRule type NMTOKEN #REQUIRED &gt;<br>
&lt;!ATTLIST dayPeriodRule at NMTOKEN #IMPLIED &gt;<br>
&lt;!ATTLIST dayPeriodRule from NMTOKEN #IMPLIED &gt;<br>
&lt;!ATTLIST dayPeriodRule before NMTOKEN #IMPLIED &gt;<br></p>
<p>Each locale can have a set of day period rules, which
determine the periods during a day for use in time formats like
"10:00 at night", or to select statements like "Your email
arrived last night." If locales do not have dayPeriodRules, the
computation of dayPeriods falls back to AM/PM.</p>
<p>There are two kinds of dayPeriodRuleSets, based on the
type:</p>
<p>The <strong><em>format</em></strong> type is used in
conjunction with times, such as to express "3:00 in the
afternoon", or "12:00 noon". Many languages do not normally use
terms that match AM/PM for such times, instead breaking up the
day into more periods.</p>
<p>The <strong>stand-alone</strong> type is used for selecting
a period of the day for a general time associated with an
event. For example, it can be used to select a message
like:</p>
<p class='xmlExample'>&lt;msg ... &gt;<br>
{day_period, select,<br>
MORNING1 {Your email arrived yesterday morning.}<br>
AFTERNOON1 {Your email arrived yesterday afternoon.}<br>
EVENING1 {Your email arrived yesterday evening.}<br>
NIGHT1 {Your email arrived last night.}<br>
other {Your email arrived yesterday.}<br>
...<br>
}<br>
&lt;/msg&gt;</p>
<p>The translated values for the selection
(<strong>stand-alone</strong>) day periods are intended for use
in designating a time of day, without an hour value.</p>
<p>These are relative times within a single day. If the event
can occur on multiple days, then that needs to be handled at a
higher level.</p>
<p>As with plurals, the exact set of periods used for any
language may be different. It is the responsibility of any
translation software to pick the relevant day periods for the
locale for display to the translator (and end user).</p>
<h4>4.5.1 <a name="Day_Period_Rules" href="#Day_Period_Rules"
id="Day_Period_Rules">Day Period Rules</a></h4>
<p>Here are the requirements for a rule set.</p>
<h5><a name="Fixed_periods" href="#Fixed_periods" id=
"Fixed_periods">4.5.1.1 Fixed periods</a></h5>There are 4
dayPeriods that are fixed; am/pm are always defined, and always
have the same meaning and definition for every locale. Midnight
and noon are optional, however if they are defined, they have
the same meaning and definition as in all other locales where
they are defined.
<pre>&lt;dayPeriodRule type="midnight" at="00:00"/&gt;
&lt;dayPeriodRule type="am" from="00:00" before="12:00" /&gt;
&lt;dayPeriodRule type="noon" at="12:00"/&gt;
&lt;dayPeriodRule type="pm" from="12:00" before="24:00" /&gt;
</pre>
<p>Note that midnight and am can overlap, as can noon and
pm.<br></p>
<p>All locales must support am/pm, but not all support
<strong>noon</strong> or <strong>midnight</strong>; they are
only supported if they meet the above definitions. For example,
German has no unique term that means exactly 12:00 noon; the
closest is Mittag, but that can extend before or after 12
noon.</p>
<p><strong>Midnight</strong> is also special, since it can
refer to either 00:00 or 24:00 — either at the start or end of
the day. That means that Tuesday 24:00 = Wednesday 00:00.
“Midnight Tuesday" is thus ambiguous: it means 24:00 in “the
party is Tuesday from 10pm to 12 midnight”, while it means
00:00 in “I was awake from 12 midnight to 3 in the
morning”.</p>
<p>It is strongly recommended that implementations provide for
the ability to specify whether <strong>midnight</strong> is
supported or not (and for either 00:00 or 24:00 or both), since
only the caller knows enough of the context to determine what
to use. In the absence of such information, 24:00 may be the
best choice.<br></p>
<h5><a name="Variable_periods" href="#Variable_periods" id=
"Variable_periods">4.5.1.2 Variable periods</a></h5>
<ol>
<li>If a locale has a set of dayPeriodRules for variable
periods, it needs to completely cover the 24 hours in a day
(from 0:00 before 24:00), with
<strong>no</strong>&nbsp;overlaps between
any&nbsp;dayPeriodRules. They may overlap with the
<strong>Fixed Periods</strong>.<br>
If it does not have a rule set for variable periods, behavior
should fall back to using the fixed periods (am, pm).</li>
<li>"from" is a closed interval (inclusive). <em>(as is the
deprecated "to")</em></li>
<li>"before" is an open interval (exclusive). <em>(as is the
deprecated "after")</em></li>
<li>"at" means starting time and end time are the same.
<em>("at" is deprecated except when used for the fixed
periods)</em></li>
<li>There must be exactly one of {at, from, after} and
exactly one of {at, to, before} for
each&nbsp;dayPeriodRule.</li>
<li>Use of non-zero minutes or seconds is deprecated.</li>
<li>The dayPeriodRules for format must allow that hh:mm
[period name] and hh [period name] can be parsed uniquely to
HH:mm [period name].
<ul>
<li>For example, you can't have &lt;dayPeriod type =
"morning1" from="00:00" to="13:00"/&gt; because "12:30
{morning}" would be ambiguous.</li>
</ul>
</li>
<li>There must not be two rules with the same type. A day
period rule may, however, span 24:00 / 00:00. Example:
<ul>
<li>
<em>Valid:</em>
<ul>
<li>&lt;dayPeriod type = "night1" from="21:00"
to="05:00"/&gt;</li>
</ul>
</li>
<li>
<em>Invalid:</em>
<ul>
<li>&lt;dayPeriod type = "night1" from="00:00"
to="05:00"/&gt;</li>
<li>&lt;dayPeriod type = "night1" from="21:00"
to="24:00"/&gt;</li>
</ul>
</li>
</ul>
</li>
<li>24:00 is&nbsp;<em>only</em>&nbsp;allowed
in&nbsp;<em>before</em>="24:00".</li>
</ol>
<h5><a name="Parsing_Day_Periods" href="#Parsing_Day_Periods"
id="Parsing_Day_Periods">4.5.1.3 Parsing Day Periods</a></h5>
<p>When parsing, if the hour is present with a strict parse the
dayperiod is checked for consistency with the hour. If there is
no hour, the center of the first
matching&nbsp;dayPeriodRule&nbsp;can be chosen&nbsp;(starting
from 0:00). However, if there is other information available
when parsing, a different point within the interval may be
chosen.</p>
<p>The dayPeriodRule may span two days, such as where
<strong>night1</strong> is [21:00, 06:00). In that case, the
midpoint is 01:30, so when parsing “Nov 12, at night”, the
midpoint result would be Nov 12, 01:30. “Nov 12, am”, “Nov 12,
pm”, “Nov 12, noon” can be parsed similarly, resulting in Nov
12, 06:00; Nov 12, 18:00; and Nov 12, 12:00; respectively.</p>
<p>“Nov 12, midnight” is special, because midnight may mean
either 00:00 or 24:00. Extra information may be needed to
disambiguate which is meant, such as whether the time is at the
start or end of an interval. In the absence of such
information, 24:00 may be the best choice. See the discussion
of <strong>midnight</strong> above.</p>
<p>If rounding is done—including the rounding done by the time
format—then it needs to be done before the dayperiod is
computed, so that the correct format is shown.</p>
<p>For examples, see <a href=
"http://www.unicode.org/cldr/charts/latest/supplemental/day_periods.html">
Day Periods Chart</a>.</p>
<h2>5 <a name="Time_Zone_Names" href="#Time_Zone_Names" id=
"Time_Zone_Names">Time Zone Names</a></h2>
<p class="dtd">&lt;!ELEMENT timeZoneNames (alias |
(hourFormat*, gmtFormat*, gmtZeroFormat*, regionFormat*,
fallbackFormat*, zone*, metazone*, special*)) &gt;</p>
<p class="dtd">&lt;!ELEMENT hourFormat ( #PCDATA ) &gt;<br>
&lt;!ELEMENT gmtFormat ( #PCDATA ) &gt;<br>
&lt;!ELEMENT gmtZeroFormat ( #PCDATA ) &gt;</p>
<p class="dtd">&lt;!ELEMENT regionFormat ( #PCDATA ) &gt;<br>
&lt;!ATTLIST regionFormat type ( standard | daylight ) #IMPLIED
&gt;</p>
<p class="dtd">&lt;!ELEMENT fallbackFormat ( #PCDATA ) &gt;</p>
<p class="dtd">&lt;!ELEMENT zone (alias | ( long*, short*,
exemplarCity*, special*)) &gt;<br>
&lt;!ATTLIST zone type CDATA #REQUIRED &gt;</p>
<p class="dtd">&lt;!ELEMENT metazone (alias | ( long*, short*,
special*)) &gt;<br>
&lt;!ATTLIST metazone type CDATA #REQUIRED &gt;</p>
<p class="dtd">&lt;!ELEMENT long (alias | (generic*, standard*,
daylight*, special*)) &gt;<br>
&lt;!ELEMENT short (alias | (generic*, standard*, daylight*,
special*)) &gt;</p>
<p class="dtd">&lt;!ELEMENT generic ( #PCDATA ) &gt;<br>
&lt;!ELEMENT standard ( #PCDATA ) &gt;<br>
&lt;!ELEMENT daylight ( #PCDATA ) &gt;</p>
<p class="dtd">&lt;!ELEMENT exemplarCity ( #PCDATA ) &gt;</p>
<p>The time zone IDs (tzid) are language-independent, and
follow the <i>TZ time zone database</i> [<a href=
"tr35.html#Olson">Olson</a>] and naming conventions. However,
the display names for those IDs can vary by locale. The generic
time is so-called <i>wall-time</i>; what clocks use when they
are correctly switched from standard to daylight time at the
mandated time of the year.</p>
<p>Unfortunately, the canonical tzid's (those in zone.tab) are
not stable: may change in each release of the <i>TZ</i> Time
Zone database. In CLDR, however, stability of identifiers is
very important. So the canonical IDs in CLDR are kept stable as
described in <a href="tr35.html#Canonical_Form">Canonical
Form</a>.</p>
<p>The <i>TZ time zone database</i> can have multiple IDs that
refer to the same entity. It does contain information on
equivalence relationships between these IDs, such as
"Asia/Calcutta" and "Asia/Kolkata". It does not remove IDs
(with a few known exceptions), but it may change the
"canonical" ID which is in the file zone.tab.</p>
<p>For lookup purposes specifications such as CLDR need a
stable canonical ID, one that does not change from release to
release. The stable ID is maintained as the first alias item
<i>type</i> element in the file bcp47/timezone.xml, such
as:</p>
<pre>
&lt;type name="inccu" alias="Asia/Calcutta Asia/Kolkata"/&gt;</pre>
<p>That file also contains the short ID used in keywords. In
versions of CLDR previous to 1.8, the alias information (but
not the short ID) was in Supplemental Data under the zoneItem,
such as:</p>
<pre>
&lt;zoneItem type="Asia/Calcutta" territory="IN" aliases="Asia/Kolkata"/&gt;</pre>
<p>This element was deprecated after the introduction of
bcp47/timezone.xml, because the information became redundant
(or was contained in the <i>TZ time zone database</i>).</p>
<p>The following is an example of time zone data. Although this
is an example of possible data, in most cases only the
exemplarCity needs translation. And that does not even need to
be present, if a country only has a single time one. As always,
the <i>type</i> field for each zone is the identification of
that zone. It is not to be translated.</p>
<pre>&lt;zone type="<span style=
"color: blue">America/Los_Angeles</span>"&gt;
&lt;long&gt;
&lt;generic&gt;<span style=
"color: blue">Pacific Time</span>&lt;/generic&gt;
&lt;standard&gt;<span style=
"color: blue">Pacific Standard Time</span>&lt;/standard&gt;
&lt;daylight&gt;<span style=
"color: blue">Pacific Daylight Time</span>&lt;/daylight&gt;
&lt;/long&gt;
&lt;short&gt;
&lt;generic&gt;<span style=
"color: blue">PT</span>&lt;/generic&gt;
&lt;standard&gt;<span style=
"color: blue">PST</span>&lt;/standard&gt;
&lt;daylight&gt;<span style=
"color: blue">PDT</span>&lt;/daylight&gt;
&lt;/short&gt;
&lt;exemplarCity&gt;<span style=
"color: blue">San Francisco</span>&lt;/exemplarCity&gt;
&lt;/zone&gt;
&lt;zone type="<span style="color: blue">Europe/London</span>"&gt;
&lt;long&gt;
&lt;generic&gt;<span style=
"color: blue">British Time</span>&lt;/generic&gt;
&lt;standard&gt;<span style=
"color: blue">British Standard Time</span>&lt;/standard&gt;
&lt;daylight&gt;<span style=
"color: blue">British Daylight Time</span>&lt;/daylight&gt;
&lt;/long&gt;
&lt;exemplarCity&gt;<span style=
"color: blue">York</span>&lt;/exemplarCity&gt;
&lt;/zone&gt;\
</pre>
<p>In a few cases, some time zone IDs do not designate a city,
as in:</p>
<pre>&lt;zone type="<span style=
"color: blue">America/Puerto_Rico</span>"&gt;
...
&lt;/zone&gt;
&lt;zone type="<span style="color: blue">America/Guyana</span>"&gt;
...
&lt;/zone&gt;
&lt;zone type="<span style="color: blue">America/Cayman</span>"&gt;
...
&lt;/zone&gt;
&lt;zone type="<span style=
"color: blue">America/St_Vincent</span>"&gt;
...
&lt;/zone&gt;
</pre>
<p>They may designate countries or territories; their actual
capital city may be a name that is too common, or, too
uncommon. CLDR time zone IDs follow the <a href=
"tr35.html#Olson">Olson</a> naming conventions.</p>
<blockquote>
<p class="note"><b>Note:</b> CLDR does not allow "GMT", "UT",
or "UTC" as translations (short or long) of time zones other
than GMT itself.</p>
</blockquote>
<blockquote>
<p class="note"><b>Note:</b> Transmitting "14:30" with no
other context is incomplete unless it contains information
about the time zone. Ideally one would transmit
neutral-format date/time information, commonly in UTC (GMT),
and localize as close to the user as possible. (For more
about UTC, see [<a href=
"tr35.html#UTCInfo">UTCInfo</a>].)</p>
</blockquote>
<p class="note">The conversion from local time into UTC depends
on the particular time zone rules, which will vary by location.
The standard data used for converting local time (sometimes
called <i>wall time</i>) to UTC and back is the <i>TZ Data</i>
[<a href="tr35.html#Olson">Olson</a>], used by Linux, UNIX,
Java, ICU, and others. The data includes rules for matching the
laws for time changes in different countries. For example, for
the US it is:</p>
<blockquote>
<p>"During the period commencing at 2 o'clock antemeridian on
the second Sunday of March of each year and ending at 2
o'clock antemeridian on the first Sunday of November of each
year, the standard time of each zone established by sections
261 to 264 of this title, as modified by section 265 of this
title, shall be advanced one hour..." (United States Law - 15
U.S.C. §6(IX)(260-7), as amended by Energy Policy Act of
2005).</p>
</blockquote>
<p class="note">Each region that has a different time zone or
daylight savings time rules, either now or at any time back to
1970, is given a unique internal ID, such as
<code>Europe/Paris</code> . (Some IDs are also distinguished on
the basis of differences before 1970.) As with currency codes,
these are internal codes. A localized string associated with
these is provided for users (such as in the Windows <i>Control
Panels&gt;Date/Time&gt;Time Zone</i>).</p>
<p class="note">Unfortunately, laws change over time, and will
continue to change in the future, both for the boundaries of
time zone regions and the rules for daylight savings. Thus the
<i>TZ</i> data is continually being augmented. Any two
implementations using the same version of the <i>TZ</i> data
will get the same results for the same IDs (assuming a correct
implementation). However, if implementations use different
versions of the data they may get different results. So if
precise results are required then both the <i>TZ</i> ID and the
<i>TZ</i> data version must be transmitted between the
different implementations.</p>
<p class="note">For more information, see [<a href=
"tr35.html#DataFormats">Data Formats</a>].</p>
<p>The following subelements of &lt;timeZoneNames&gt; are used
to control the fallback process described in <a href=
"#Using_Time_Zone_Names">Using Time Zone Names</a>.</p>
<table cellspacing="0" cellpadding="4" border="1">
<caption>
<a name="timeZoneNames_Elements_Used_for_Fallback" href=
"#timeZoneNames_Elements_Used_for_Fallback" id=
"timeZoneNames_Elements_Used_for_Fallback">&lt;timeZoneNames&gt;
Elements Used for Fallback</a>
</caption>
<tr>
<th>Element Name</th>
<th>Data Examples</th>
<th>Results/Comment</th>
</tr>
<tr>
<td rowspan="2">hourFormat</td>
<td rowspan="2">"+HHmm;-HHmm"</td>
<td>"+1200"</td>
</tr>
<tr>
<td>"-1200"</td>
</tr>
<tr>
<td rowspan="2">gmtFormat</td>
<td>"GMT{0}"</td>
<td>"GMT-0800"</td>
</tr>
<tr>
<td>"{0}ВпГ"</td>
<td>"-0800ВпГ"</td>
</tr>
<tr>
<td>gmtZeroFormat</td>
<td>"GMT"</td>
<td>Specifies how GMT/UTC with no explicit offset (implied
0 offset) should be represented.</td>
</tr>
<tr>
<td rowspan="2">regionFormat</td>
<td>"{0} Time"</td>
<td>"Japan Time"</td>
</tr>
<tr>
<td>"Hora de {0}"</td>
<td>"Hora de Japón"</td>
</tr>
<tr>
<td rowspan="2">regionFormat type="daylight"<br>
(or "standard")</td>
<td>"{0} Daylight Time"</td>
<td>"France Daylight Time"</td>
</tr>
<tr>
<td>"horario de verano de {0}"</td>
<td>"horario de verano de Francia"</td>
</tr>
<tr>
<td>fallbackFormat</td>
<td>"{1} ({0})"</td>
<td>"Pacific Time (Canada)"</td>
</tr>
</table>
<p>When referring to the abbreviated (short) form of the time
zone name, there are often situations where the location-based
(city or country) time zone designation for a particular
language may not be in common usage in a particular
territory.</p>
<blockquote>
<p class="note"><b>Note:</b> User interfaces for time zone
selection can use the "generic location format" for time zone
names to obtain the most useful ordering of names in a menu
or list; see <i><a href="#Using_Time_Zone_Names">Using Time
Zone Names</a></i> and the zone section of the <i><a href=
"#Date_Field_Symbol_Table">Date Field Symbol
Table</a>.</i></p>
</blockquote>
<h3>5.1 <a name="Metazone_Names" href="#Metazone_Names" id=
"Metazone_Names">Metazone Names</a></h3>
<p>A metazone is an grouping of one or more internal TZIDs that
share a common display name in current customary usage, or that
have shared a common display name during some particular time
period. For example, the zones <i>Europe/Paris, Europe/Andorra,
Europe/Tirane, Europe/Vienna, Europe/Sarajevo, Europe/Brussels,
Europe/Zurich, Europe/Prague, Europe/Berlin</i>, and so on are
often simply designated <i>Central European Time</i> (or
translated equivalent).</p>
<p>A metazone's display fields become a secondary fallback if
an appropriate data field cannot be found in the explicit time
zone data. The <i>usesMetazone</i> field indicates that the
target metazone is active for a particular time. This also
provides a mechanism to effectively deal with situations where
the time zone in use has changed for some reason. For example,
consider the TZID "America/Indiana/Knox", which observed
Central time (GMT-6:00) prior to October 27, 1991, and has
currently observed Central time since April 2, 2006, but has
observed Eastern time ( GMT-5:00 ) between these two dates.
This is denoted as follows</p>
<pre>&lt;timezone type="America/Indiana/Knox"&gt;
&lt;usesMetazone to="1991-10-27 07:00" mzone="America_Central"/&gt;
&lt;usesMetazone to="2006-04-02 07:00" from="1991-10-27 07:00" mzone="America_Eastern"/&gt;
&lt;usesMetazone from="2006-04-02 07:00" mzone="America_Central"/&gt;
&lt;/timezone&gt;</pre>
<p>Note that the dates and times are specified in UTC, not
local time.</p>
<p>The metazones can then have translations in different locale
files, such as the following.</p>
<pre>&lt;metazone type="America_Central"&gt;
&lt;long&gt;
&lt;generic&gt;Central Time&lt;/generic&gt;
&lt;standard&gt;Central Standard Time&lt;/standard&gt;
&lt;daylight&gt;Central Daylight Time&lt;/daylight&gt;
&lt;/long&gt;
&lt;short&gt;
&lt;generic&gt;CT&lt;/generic&gt;
&lt;standard&gt;CST&lt;/standard&gt;
&lt;daylight&gt;CDT&lt;/daylight&gt;
&lt;/short&gt;
&lt;/metazone&gt;
&lt;metazone type="America_Eastern"&gt;
&lt;long&gt;
&lt;generic&gt;Eastern Time&lt;/generic&gt;
&lt;standard&gt;Eastern Standard Time&lt;/standard&gt;
&lt;daylight&gt;Eastern Daylight Time&lt;/daylight&gt;
&lt;/long&gt;
&lt;short&gt;
&lt;generic&gt;ET&lt;/generic&gt;
&lt;standard&gt;EST&lt;/standard&gt;
&lt;daylight&gt;EDT&lt;/daylight&gt;
&lt;/short&gt;
&lt;/metazone&gt;</pre>
<pre>&lt;metazone type="America_Eastern"&gt;
&lt;long&gt;
&lt;generic&gt;Heure de l’Est&lt;/generic&gt;
&lt;standard&gt;Heure normale de l’Est&lt;/standard&gt;
&lt;daylight&gt;Heure avancée de l’Est&lt;/daylight&gt;
&lt;/long&gt;
&lt;short&gt;
&lt;generic&gt;HE&lt;/generic&gt;
&lt;standard&gt;HNE&lt;/standard&gt;
&lt;daylight&gt;HAE&lt;/daylight&gt;
&lt;/short&gt;
&lt;/metazone&gt;
</pre>
<p>When formatting a date and time value using this data, an
application can properly be able to display "Eastern Time" for
dates between 1991-10-27 and 2006-04-02, but display "Central
Time" for current dates. (See also <i><a href=
"tr35.html#Date_Ranges">Dates and Date Ranges</a></i>).</p>
<p>Metazones are used with the 'z', 'zzzz', 'v', and 'vvvv date
time pattern characters, and not with the 'Z', 'ZZZZ', 'VVVV'
and other pattern characters for time zone formatting. For more
information, see <a href="#Date_Format_Patterns"><u>Date Format
Patterns</u></a> .</p>
<p>The commonlyUsed element is now deprecated. The CLDR
committee has found it nearly impossible to obtain accurate and
reliable data regarding which time zone abbreviations may be
understood in a given territory, and therefore has changed to a
simpler approach. Thus, if the short metazone form is available
in a given locale, it is to be used for formatting regardless
of the value of commonlyUsed. If a given short metazone form is
known NOT to be understood in a given locale and the parent
locale has this value such that it would normally be inherited,
the inheritance of this value can be explicitly disabled by use
of the 'no inheritance marker' as the value, which is 3
simultaneous empty set characters ( U+2205 ).</p>
<h2>6 <a name="Supplemental_Time_Zone_Data" href=
"#Supplemental_Time_Zone_Data" id=
"Supplemental_Time_Zone_Data">Supplemental Time Zone
Data</a></h2>
<h3>6.1 <a name="Metazones" href="#Metazones" id=
"Metazones">Metazones</a></h3>
<p class="dtd">&lt;!ELEMENT metaZones (metazoneInfo?,
mapTimezones?) &gt;<br></p>
<p class="dtd">&lt;!ELEMENT metazoneInfo (timezone*) &gt;</p>
<p class="dtd">&lt;!ELEMENT timezone (usesMetazone*) &gt;<br>
&lt;!ATTLIST timezone type CDATA #REQUIRED &gt;</p>
<p class="dtd">&lt;!ELEMENT usesMetazone EMPTY &gt;<br>
&lt;!ATTLIST usesMetazone mzone NMTOKEN #REQUIRED &gt;<br>
&lt;!ATTLIST usesMetazone from CDATA #IMPLIED &gt;<br>
&lt;!ATTLIST usesMetazone to CDATA #IMPLIED &gt;</p>
<p class="dtd">&lt;!ELEMENT mapTimezones ( mapZone* ) &gt;<br>
&lt;!ATTLIST mapTimezones type NMTOKEN #IMPLIED &gt;<br>
&lt;!ATTLIST mapTimezones typeVersion CDATA #IMPLIED &gt;<br>
&lt;!ATTLIST mapTimezones otherVersion CDATA #IMPLIED &gt;<br>
&lt;!ATTLIST mapTimezones references CDATA #IMPLIED &gt;</p>
<p class="dtd">&lt;!ELEMENT mapZone EMPTY &gt;<br>
&lt;!ATTLIST mapZone type CDATA #REQUIRED &gt;<br>
&lt;!ATTLIST mapZone other CDATA #REQUIRED &gt;<br>
&lt;!ATTLIST mapZone territory CDATA #IMPLIED &gt;<br>
&lt;!ATTLIST mapZone references CDATA #IMPLIED &gt;</p>
<p>The following subelement of &lt;metaZones&gt; provides a
mapping from a single Unicode time zone id to metazones. For
more information about metazones, See <i><a href=
"tr35-dates.html#Time_Zone_Names">Time Zone Names</a></i>.</p>
<pre>&lt;metazoneInfo&gt;
&lt;timezone type="Europe/Andorra"&gt;
&lt;usesMetazone mzone="Europe_Central"/&gt;
&lt;/timezone&gt;
....
&lt;timezone type="Asia/Yerevan"&gt;
&lt;usesMetazone to="1991-09-22 20:00" mzone="Yerevan"/&gt;
&lt;usesMetazone from="1991-09-22 20:00" mzone="Armenia"/&gt;
&lt;/timezone&gt;
....
</pre>
<p>The following subelement of &lt;metaZones&gt; specifies a
mapping from a metazone to golden zones for each territory. For
more information about golden zones, see <i><a href=
"tr35-dates.html#Using_Time_Zone_Names">Using Time Zone
Names</a></i>.</p>
<pre>&lt;mapTimezones type="metazones"&gt;
&lt;mapZone other="Acre" territory="001" type="America/Rio_Branco"/&gt;
&lt;mapZone other="Afghanistan" territory="001" type="Asia/Kabul"/&gt;
&lt;mapZone other="Africa_Central" territory="001" type="Africa/Maputo"/&gt;
&lt;mapZone other="Africa_Central" territory="BI" type="Africa/Bujumbura"/&gt;
&lt;mapZone other="Africa_Central" territory="BW" type="Africa/Gaborone"/&gt;
....
</pre>
<h3>6.2 <a name="Windows_Zones" href="#Windows_Zones" id=
"Windows_Zones">Windows Zones</a></h3>
<p class="dtd">&lt;!ELEMENT windowsZones (mapTimezones?)
&gt;</p>
<p>The &lt;mapTimezones&gt; element can be also used to provide
mappings between Unicode time zone IDs and other time zone IDs.
This example specifies a mapping from Windows TZIDs to Unicode
time zone IDs .</p>
<pre>
&lt;mapTimezones otherVersion="07dc0000" typeVersion="2011n"&gt;
....
&lt;!-- (UTC-08:00) Baja California --&gt;
&lt;mapZone other="Pacific Standard Time (Mexico)" territory="001" type="America/Santa_Isabel"/&gt;
&lt;mapZone other="Pacific Standard Time (Mexico)" territory="MX" type="America/Santa_Isabel"/&gt;
&lt;!-- (UTC-08:00) Pacific Time (US &amp; Canada) --&gt;
&lt;mapZone other="Pacific Standard Time" territory="001" type="America/Los_Angeles"/&gt;
&lt;mapZone other="Pacific Standard Time" territory="CA" type="America/Vancouver America/Dawson America/Whitehorse"/&gt;
&lt;mapZone other="Pacific Standard Time" territory="MX" type="America/Tijuana"/&gt;
&lt;mapZone other="Pacific Standard Time" territory="US" type="America/Los_Angeles"/&gt;
&lt;mapZone other="Pacific Standard Time" territory="ZZ" type="PST8PDT"/&gt;
....
</pre>
<p>The attributes otherVersion and typeVersion in
&lt;mapTimezones&gt; specify the versions of two systems. In
the example above, otherVersion="07dc0000" specifies the
version of Windows time zone and typeVersion="2011n" specifies
the version of Unicode time zone IDs. The attribute
territory="001" in &lt;mapZone&gt; element indicates the long
canonical Unicode time zone ID specified by the type attribute
is used as the default mapping for the Windows TZID. For each
unique Windows TZID, there must be exactly one &lt;mapZone&gt;
element with territory="001". &lt;mapZone&gt; elements other
than territory="001" specify territory specific mappings. When
multiple Unicode time zone IDs are available for a single
territory, the value of the type attribute will be a list of
Unicode time zone IDs delimited by space. In this case, the
first entry represents the default mapping for the territory.
The territory "ZZ" is used when a Unicode time zone ID is not
associated with a specific territory.</p>
<p><b>Note:</b> The long canonical Unicode time zone ID might
be deprecated in the tz database[<a href=
"tr35.html#Olson">Olson</a>]. For example, CLDR uses
"Asia/Culcutta" as the long canonical time zone ID for Kolkata,
India. The same ID was moved to 'backward' file and replaced
with a new ID "Asia/Kolkata" in the tz database. Therefore, if
you want to get an equivalent Windows TZID for a zone ID in the
tz dadtabase, you have to resolve the long canonical Unicode
time zone ID (e.g. "Asia/Culcutta") for the zone ID (e.g.
"Asia/Kolkata"). For more details, see <a href=
"tr35.html#Time_Zone_Identifiers">Section 3.7.1.2 Time Zone
Identifiers</a>.</p>
<p><b>Note:</b> Not all Unicode time zones have equivalent
Windows TZID mappings. Also, not all Windows TZIDs have
equivalent Unicode time zones. For example, there is no
equivalent Windows zone for Unicode time zone
"Australia/Lord_Howe", and there is no equivalent Unicode time
zone for Windows zone "E. Europe Standard Time" (as of CLDR 25
release).</p>
<h3>6.3 <a name="Primary_Zones" href="#Primary_Zones" id=
"Primary_Zones">Primary Zones</a></h3>
<p class="dtd">&lt;!ELEMENT primaryZones ( primaryZone* )
&gt;<br>
&lt;!ELEMENT primaryZone ( #PCDATA ) &gt;<br>
&lt;!ATTLIST primaryZone iso3166 NMTOKEN #REQUIRED &gt;</p>
<p>This element is for data that is used to format a time
zone’s generic location name. Each &lt;primaryZone&gt; element
specifies the dominant zone for a region; this zone should use
the region name for its generic location name even though there
are other canonical zones available in the same region. For
example, Asia/Shanghai is displayed as "China Time", instead of
"Shanghai Time". Sample data:</p>
<pre>&lt;primaryZones&gt;
&lt;primaryZone iso3166="CL"&gt;America/Santiago&lt;/primaryZone&gt;
&lt;primaryZone iso3166="CN"&gt;Asia/Shanghai&lt;/primaryZone&gt;
&lt;primaryZone iso3166="DE"&gt;Europe/Berlin&lt;/primaryZone&gt;
</pre>
<p>This information was previously specified by the LDML
&lt;singleCountries&gt; element under each locale’s
&lt;timeZoneNames&gt; element. However, that approach had
inheritance issues, and the data is not really locale-specific
anyway.</p>
<h2>7 <a name="Using_Time_Zone_Names" href=
"#Using_Time_Zone_Names" id="Using_Time_Zone_Names">Using Time
Zone Names</a></h2>
<p>There are three main types of formats for zone identifiers:
GMT, generic (wall time), and standard/daylight. Standard and
daylight are equivalent to a particular offset from GMT, and
can be represented by a GMT offset as a fallback. In general,
this is not true for the generic format, which is used for
picking timezones or for conveying a timezone for specifying a
recurring time (such as a meeting in a calendar). For either
purpose, a GMT offset would lose information.</p>
<h3>7.1 <a name="Time_Zone_Format_Terminology" href=
"#Time_Zone_Format_Terminology" id=
"Time_Zone_Format_Terminology">Time Zone Format
Terminology</a></h3>
<p>The following terminology defines more precisely the formats
that are used.</p>
<p><b>Generic non-location format:</b> Reflects "wall time"
(what is on a clock on the wall): used for recurring events,
meetings, or anywhere people do not want to be overly specific.
For example, "10 am Pacific Time" will be GMT-8 in the winter,
and GMT-7 in the summer.</p>
<ul>
<li>"Pacific Time" (long)</li>
<li>"PT" (short)</li>
</ul>
<p><b>Generic partial location format:</b> Reflects "wall
time": used as a fallback format when the generic non-location
format is not specific enough.</p>
<ul>
<li>"Pacific Time (Canada)" (long)</li>
<li>"PT (Whitehorse)" (short)</li>
</ul>
<p><b>Generic location format:</b> Reflects "wall time": a
primary function of this format type is to represent a time
zone in a list or menu for user selection of time zone. It is
also a fallback format when there is no translation for the
generic non-location format. Times can also be organized
hierarchically by country for easier lookup.</p>
<blockquote>
<p>France Time<br>
Italy Time<br>
Japan Time<br>
United States<br>
&nbsp; &nbsp; &nbsp; Chicago Time<br>
&nbsp; &nbsp; &nbsp; Denver Time<br>
&nbsp; &nbsp; &nbsp; Los Angeles Time<br>
&nbsp; &nbsp; &nbsp; New York Time<br>
United Kingdom Time</p>
</blockquote>
<p>Note: A generic location format is constructed by a part of
time zone ID representing an exemplar city name or its country
as the final fallback. However, there are Unicode time zones
which are not associated with any locations, such as
"Etc/GMT+5" and "PST8PDT". Although the date format pattern
"VVVV" specifies the generic location format, but it displays
localized GMT format for these. Some of these time zones
observe daylight saving time, so the result (localized GMT
format) may change depending on input date. For generating a
list for user selection of time zone with format "VVVV", these
non-location zones should be excluded.</p>
<p><b>Specific non-location format:</b> Reflects a specific
standard or daylight time, which may or may not be the wall
time. For example, "10 am Pacific Standard Time" will be GMT-8
in the winter and in the summer.</p>
<ul>
<li>"Pacific Standard Time" (long)</li>
<li>"PST" (short)</li>
<li>"Pacific Daylight Time" (long)</li>
<li>"PDT" (short)</li>
</ul>
<p><b>Localized GMT format:</b> A constant, specific offset
from GMT (or UTC), which may be in a translated form. There are
two styles for this. The first is used when there is an
explicit non-zero offset from GMT; this style is specified by
the &lt;gmtFormat&gt; element and &lt;hourFormat&gt; element.
The long format always uses 2-digit hours field and minutes
field, with optional 2-digit seconds field. The short format is
intended for the shortest representation and uses hour fields
without leading zero, with optional 2-digit minutes and seconds
fields. The digits used for hours, minutes and seconds fields
in this format are the locale's default decimal digits:</p>
<ul>
<li>"GMT+03:30" (long)</li>
<li>"GMT+3:30" (short)</li>
<li>"UTC-03.00" (long)</li>
<li>"UTC-3" (short)</li>
<li>"Гриинуич+03:30" (long)</li>
</ul>
<p>Otherwise (when the offset from GMT is zero, referring to
GMT itself) the style specified by the &lt;gmtZeroFormat&gt;
element is used:</p>
<ul>
<li>"GMT"</li>
<li>"UTC"</li>
<li>"Гриинуич"</li>
</ul>
<p><b>ISO 8601 time zone formats:</b> The formats based on the
[<a href="tr35.html#ISO8601">ISO 8601</a>]&nbsp; local time
difference from UTC ("+" sign is used when local time offset is
0), or the UTC indicator ("Z" - only when the local time offset
is 0 and the specifier X* is used). The ISO 8601 basic format
does not use a separator character between hours and minutes
field, while the extended format uses colon (':') as the
separator. The ISO 8601 basic format with hours and minutes
fields is equivalent to RFC 822 zone format.</p>
<ul>
<li>"-0800" (basic)</li>
<li>"-08" (basic - short)</li>
<li>"-08:00" (extended)</li>
<li>"Z" (UTC)</li>
</ul>
<blockquote>
<p class="note">Note: This specification extends the original
ISO 8601 formats and some format specifiers append seconds
field when necessary.</p>
</blockquote>
<p><b>Raw Offset</b> - an offset from GMT that does not include
any daylight savings behavior. For example, the raw offset for
Pacific Time is -8, even though the <i>observed offset</i> may
be -8 or -7.</p>
<p><b>Metazone</b> - a collection of time zones that share the
same behavior and same name during some period. They may differ
in daylight behavior (whether they have it and when).</p>
<p>For example, the TZID America/Cambridge_Bay is in the
following metazones during various periods:</p>
<blockquote>
<p><font size="2">&lt;timezone
type="America/Cambridge_Bay"&gt;<br>
&lt;usesMetazone to="1999-10-31 08:00"
mzone="America_Mountain"/&gt;<br>
&lt;usesMetazone to="2000-10-29 07:00" from="1999-10-31
08:00" mzone="America_Central"/&gt;<br>
&lt;usesMetazone to="2000-11-05 05:00" from="2000-10-29
07:00" mzone="America_Eastern"/&gt;<br>
&lt;usesMetazone to="2001-04-01 09:00" from="2000-11-05
05:00" mzone="America_Central"/&gt;<br>
&lt;usesMetazone from="2001-04-01 09:00"
mzone="America_Mountain"/&gt;<br>
&lt;/timezone&gt;</font></p>
</blockquote>
<p>Zones may join or leave a metazone over time. The data
relating between zones and metazones is in the supplemental
information; the locale data is restricted to translations of
metazones and zones.</p>
<blockquote>
<b>Invariants:</b>
<ul>
<li>At any given point in time, each zone belongs to no
more than one metazone.</li>
<li>At a given point in time, a zone may not belong to any
metazones.</li>
<li><i>Except for daylight savings</i>, at any given time,
all zones in a metazone have the same offset at that
time.</li>
</ul>
</blockquote>
<p><b>Golden Zone</b> - the TZDB zone that exemplifies a
metazone. For example, America/New_York is the golden zone for
the metazone America_Eastern:</p>
<blockquote>
<p><font size="2">&lt;mapZone other="America_Eastern"
territory="001" type="America/New_York"/&gt;</font></p>
</blockquote>
<blockquote>
<b>Invariants:</b>
<ul>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">The
golden zones are those in mapZone supplemental data under
the territory "001".</li>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">Every
metazone has exactly one golden zone.</li>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">Each
zone has at most one metazone for which it is golden.</li>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">The
golden zone is in that metazone during the entire life of
the metazone. (The raw offset of the golden zone may change
over time.)</li>
<li>Each other zone must have the same raw offset as the
golden zone, for the entire period that it is in the
metazone. (It might not have the same offset when daylight
savings is in effect.)</li>
<li>A golden zone in mapTimezones must have reverse mapping
in metazoneInfo.</li>
<li>A single time zone can be a golden zone of multiple
different metazones if any two of them are never active at
a same time.</li>
</ul>
</blockquote>
<p><b>Preferred Zone</b> - for a given TZID, the "best" zone
out of a metazone for a given country or language.</p>
<blockquote>
<b>Invariants:</b>
<ul>
<li>The preferred zone for a given country XX are those in
mapZone supplemental data under the territory XX.</li>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">Every
metazone has at most one preferred zone for a given
territory XX.</li>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">Each
zone has at most one metazone for which it is preferred for
a territory XX.</li>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">The
preferred zone for a given metazone and territory XX is in
a metazone M during any time when any other zone in XX is
also in M</li>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">A
preferred zone in mapTimezones must have reverse mapping in
metazoneInfo</li>
</ul>
</blockquote>
<p>For example, for America_Pacific the preferred zone for
Canada is America/Vancouver, and the preferred zone for Mexico
is America/Tijuana. The golden zone is America/Los_Angeles,
which is also also the preferred zone for any other
country.</p>
<blockquote>
<p><font size="2">&lt;mapZone other="America_Pacific"
territory="001" type="America/Los_Angeles"/&gt;<br>
&lt;mapZone other="America_Pacific" territory="CA"
type="America/Vancouver"/&gt;<br>
&lt;mapZone other="America_Pacific" territory="MX"
type="America/Tijuana"/&gt;</font></p>
</blockquote>
<p><a name="fallbackFormat" href="#fallbackFormat" id=
"fallbackFormat"><b>fallbackFormat</b>:</a> a formatting string
such as "{1} ({0})", where {1} is the metazone, and {0} is the
country or city.</p>
<p><b>regionFormat:</b> a formatting string such as "{0} Time",
where {0} is the country or city.</p>
<h3>7.2 <a name="Time_Zone_Goals" href="#Time_Zone_Goals" id=
"Time_Zone_Goals">Goals</a></h3>
<p>The timezones are designed so that:</p>
<blockquote>
<p>For any given locale, every <i>time</i> round trips with
all patterns (but not necessarily every timezone). That is,
given a time and a format pattern with a zone string, you can
format, then parse, and get back the same time.</p>
<p>Note that the round-tripping is not just important for
parsing; it provides for formatting dates and times in an
unambiguous way for users. It is also important for
testing.<br>
<br>
There are exceptions to the above for transition times.</p>
<ul>
<li>With generic format, time zone ID or exemplar city
name, during the transition when the local time maps to two
possible GMT times.
<ul>
<li>For example, Java works as follows, favoring
standard time:</li>
<li>Source: Sun Nov 04 01:30:00 PDT 2007</li>
<li>=&gt; Formatted: "Sunday, November 4, 2007 1:30:00
AM"</li>
<li>=&gt; Parsed: Sun Nov 04 01:30:00 PST 2007</li>
</ul>
</li>
<li>When the timezone changes offset, say from GMT+4 to
GMT+5, there can also be a gap.</li>
</ul>
<p>The V/VV/VVV/VVVV format will roundtrip not only the time,
but the canonical timezone.</p>
</blockquote>
<p>When the data for a given format is not available, a
fallback format is used. The fallback order is given in the
following by a list.</p>
<ol>
<li>
<b>Specifics</b>
<ul>
<li>z - [short form] specific non-location
<ul>
<li>falling back to short localized GMT</li>
</ul>
</li>
<li>zzzz - [long form] specific non-location
<ul>
<li>falling back to long localized GMT</li>
</ul>
</li>
<li>Z/ZZZZZ/X+/x+ - ISO 8601 formats (no fallback
necessary)</li>
<li>ZZZZ/O+ - Localized GMT formats (no fallback
necessary)</li>
</ul>
</li>
<li>
<b>Generics</b>
<ul>
<li>v - [short form] generic non-location<br>
<i>(however, the rules are more complicated, see #5
below)</i>
<ul>
<li>falling back to generic location</li>
<li>falling back to short localized GMT</li>
</ul>
</li>
<li>vvvv - [long form] generic non-location<br>
<i>(however, the rules are more complicated, see #5
below)</i>
<ul>
<li>falling back to generic location</li>
<li>falling back to long localized GMT</li>
</ul>
</li>
<li>V - short time zone ID
<ul>
<li>falling back to the special ID "unk"
(Unknown)</li>
</ul>
</li>
<li>VV - long time zone ID (no fallback necessary,
because this is the input)</li>
<li>VVV - exemplar city
<ul>
<li>falling back to the localized exemplar city for
the unknown zone (Etc/Unknown), for example "Unknown
City" for English</li>
</ul>
</li>
<li>VVVV - generic location
<ul>
<li>falling back to long localized GMT</li>
</ul>
</li>
</ul>
</li>
</ol>
<p>The following process is used for the particular formats,
with the fallback rules as above.</p>
<p>Some of the examples are drawn from real data, while others
are for illustration. For illustration the region format is
"Hora de {0}". The fallback format in the examples is "{1}
({0})", which is what is in root.</p>
<ol>
<li>In <b>all</b> cases, first canonicalize the <i>TZ</i> ID
according to the Unicode Locale Extension <i>type</i> mapping
data (See <a href="tr35.html#Time_Zone_Identifiers">Time Zone
Identifiers</a> for more details).. Use that canonical TZID
in each of the following steps.
<ul>
<li>America/Atka → America/Adak</li>
<li>Australia/ACT → Australia/Sydney</li>
</ul>
</li>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">For the
localized GMT format, use the gmtFormat (such as "GMT{0}" or
"HMG{0}") with the hourFormat (such as "+HH:mm;-HH:mm" or
"+HH.mm;-HH.mm").
<ul>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">
America/Los_Angeles → "GMT-08:00" // standard time</li>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">
America/Los_Angeles → "HMG-07:00" // daylight time</li>
<li style="margin-top: 0.5em; margin-bottom: 0.5em">
Etc/GMT+3 → "GMT-03.00" // note that <i>TZ</i> tzids have
inverse polarity!</li>
</ul>
<p><b>Note:</b> The digits should be whatever are
appropriate for the locale used to format the time zone,
not necessarily from the western digits, 0..9. For example,
they might be from ०..९.</p>
</li>
<li>For ISO 8601 time zone format return the results
according to the ISO 8601 specification.
<ul>
<li>America/Los_Angeles →
<ul>
<li>"-08" ("X","x")</li>
<li>"-0800" ("Z","XX","XXXX","xx","xxxx")</li>
<li>"-08:00"
("ZZZZZ","XXX","XXXXX","xxx","xxxxx")</li>
</ul>
</li>
<li>Etc/GMT →
<ul>
<li>"Z" ("ZZZZZ", "X", "XX", "XXX", "XXXX",
"XXXXX")</li>
<li>"+00" ("x")</li>
<li>"+0000" ("Z", "xx", "xxxx")</li>
<li>"+00:00" ("xxx", "xxxxx")</li>
</ul>
</li>
</ul>
<p><b>Note:</b> The digits in this case are always from the
western digits, 0..9.</p>
</li>
<li>For the non-location formats (generic or specific):
<ol>
<li>if there is an explicit translation for the TZID in
&lt;timeZoneNames&gt; according to type (generic,
standard, or daylight) in the resolved locale, return it.
<ol>
<li>If the requested type is not available, but
another type is, and there is a <strong>Type
Fallback</strong> then return that other type.
<ul>
<li>Examples:
<ul>
<li>America/Los_Angeles → // generic</li>
<li>America/Los_Angeles → "アメリカ太平洋標準時" //
standard</li>
<li>America/Los_Angeles → "Yhdysvaltain
Tyynenmeren kesäaika" // daylight</li>
<li>Europe/Dublin &nbsp;→ "Am Samhraidh na
hÉireann" // daylight</li>
<li>Note: This translation may not at all be
literal: it would be what is most
recognizable for people using the target
language.</li>
</ul>
</li>
</ul>
</li>
</ol>
</li>
<li>Otherwise, get the requested metazone format
according to type (generic, standard, daylight).
<ol>
<li>If the requested type is not available, but
another type is, get the format according to
<strong>Type Fallback</strong>.</li>
<li>If there is no format for the type, fall
back.</li>
</ol>
</li>
<li>Otherwise do the following:
<ol>
<li>Get the country for the current locale. If there
is none, use the most likely country based on the
likelySubtags data. If there is none, use “001”.</li>
<li>Get the preferred zone for the metazone for the
country; if there is none for the country, use the
preferred zone for the metazone for “001”.</li>
<li>If that preferred zone is the same as the
requested zone, use the metazone format. For example,
"Pacific Time" for Vancouver if the locale is en_CA,
or for Los Angeles if locale is en_US.</li>
<li>Otherwise, if the zone is the preferred zone for
its country but not for the country of the locale,
use the metazone format + country in the
<em>fallbackFormat</em>.</li>
<li>Otherwise, use the metazone format + city in the
<em>fallbackFormat</em>.
<ul>
<li>Examples:
<ul>
<li>"Pacific Time (Canada)" // for the zone
Vancouver in the locale en_MX.</li>
<li>"Mountain Time (Phoenix)"</li>
<li>"Pacific Time (Whitehorse)"</li>
</ul>
</li>
</ul>
</li>
</ol>
</li>
</ol>
</li>
<li>For the generic location format:
<ol>
<li>From the TZDB get the country code for the zone, and
determine whether there is only one timezone in the
country. If there is only one timezone or if the zone id
is in the &lt;primaryZones&gt; list, format the country
name with the <em>regionFormat</em>, and return it.
<ul>
<li>Examples:
<ul>
<li>Europe/Rome → IT → "Italy Time" // for
English</li>
<li>Asia/Shanghai → CN → "China Time" //
Asia/Shanghai is the <em>primaryZone</em> for
China</li>
<li>Africa/Monrovia → LR → "Hora de Liberja"</li>
<li>America/Havana → CU → "Hora de CU" // if CU
is not localized</li>
</ul>
</li>
</ul>
</li>
<li>Otherwise format the exemplar city with the
<em>regionFormat</em>, and return it.
<ol>
<li>America/Buenos_Aires → "Buenos Aires Time"</li>
</ol>
</li>
</ol>
</li>
</ol>
<blockquote>
<p><strong>Note:</strong> If a language does require
grammatical changes when composing strings, then the
<em>regionFormat</em> should either use a neutral format such
as "Heure: {0}", or put all exceptional cases in explicitly
translated strings.</p>
</blockquote>
<p><strong>Type Fallback</strong></p>
<p>When a specified type (generic, standard, daylight) does not
exist:</p>
<ol>
<li>If the daylight type does not exist, then the metazone
doesn’t require daylight support. For all three types:
<ol>
<li>If the generic type exists, use it.</li>
<li>Otherwise if the standard type exists, use it.</li>
</ol>
</li>
<li>Otherwise if the generic type is needed, but not
available, and the offset and daylight offset do not change
within 184 day +/- interval around the exact formatted time,
use the standard type.
<ol>
<li>Example: "Mountain Standard Time" for Phoenix</li>
<li>Note: 184 is the smallest number that is at least 6
months AND the smallest number that is more than 1/2 year
(Gregorian).</li>
</ol>
</li>
</ol>
<p><strong>Composition</strong></p>
<p>In composing the metazone + city or country:</p>
<ol>
<li>Use the <em>fallbackFormat</em> "{1} ({0})", where:
<ul>
<li>{1} will be the metazone</li>
<li>{0} will be a qualifier (city or country)</li>
<li>Example:
<ul>
<li>metazone = Pacific Time</li>
<li>city = Phoenix</li>
<li>→ "Pacific Time (Phoenix)"</li>
</ul>
</li>
</ul>
</li>
<li>If the localized country name is not available, use the
code:
<ul>
<li>CU (country code)→ "CU" <em>// no localized country
name for Cuba</em></li>
</ul>
</li>
<li>If the localized exemplar city is not available, use as
the exemplar city the last field of the raw TZID, stripping
off the prefix and turning _ into space.
<ul>
<li>America/Los_Angeles → "Los Angeles" <em>// no
localized exemplar city</em></li>
</ul>
</li>
</ol>
<p><b>Note:</b> As with the <em>regionFormat</em>, exceptional
cases need to be explicitly translated.</p>
<h3>7.3 <a name="Time_Zone_Parsing" href="#Time_Zone_Parsing"
id="Time_Zone_Parsing">Parsing</a></h3>
<p>In parsing, an implementation will be able to either
determine the zone id, or a simple offset from GMT for anything
formatting according to the above process.</p>
<p>The following is a sample process for how this might be
done. It is only a sample; implementations may use different
methods for parsing.</p>
<p>The sample describes the parsing of a zone as if it were an
isolated string. In implementations, the zone may be mixed in
with other data (like the time), so the parsing actually has to
look for the longest match, and then allow the remaining text
to be parsed for other content. That requires certain adaptions
to the following process.</p>
<ol style="background-color: rgb(255, 255, 255);">
<li><font color="#000000">Start with a string S.</font></li>
<li>
<font color="#000000">If S matches ISO 8601 time zone
format, return it.</font>
<ul>
<li>For example, "-0800" (RFC 822), "-08:00" (ISO 8601)
=&gt; Etc/GMT+8</li>
</ul>
</li>
<li>If S matches the English or localized GMT format, return
the corresponding TZID
<ul>
<li>Matching should be lenient. Thus allow for the number
formats like: 03, 3, 330, 3:30, 33045 or 3:30:45. Allow
+, -, or nothing. Allow spaces after GMT, +/-, and before
number. Allow non-Latin numbers. Allow UTC or UT (per RFC
788) as synonyms for GMT ("GMT", "UT", "UTC" are global
formats, always allowed in parsing regardless of
locale).</li>
<li>For example, "GMT+3" or "UT+3" or "HPG+3" =&gt;
Etc/GMT-3</li>
<li>When parsing, the absence of a numeric offset should
be interpreted as offset 0, whether in localized or
global formats. For example, "GMT" or "UT" or "UTC+0" or
"HPG" =&gt; Etc/GMT</li>
</ul>
</li>
<li>
<font color="#000000">If S matches the fallback format,
extract P = {0} [ie, the part in parens in the root format]
and N = {1}.<br>
If S does not match, set P = "" and N = S<br>
If N matches the region format, then M = {0} from that
format, otherwise M = N.</font>
<ul>
<li><font color="#000000">For example, "United States
(Los Angeles) Time" =&gt; N = "United States Time", M =
"United States", P = "Los Angeles".</font></li>
<li><font color="#000000">For example, "United States
Time" =&gt; N = "United States Time", M = "United
States", P = "".</font></li>
<li><font color="#000000">For example, "United States"
=&gt; N = M = "United States", P = "".</font></li>
</ul>
</li>
<li>
<font color="#000000">If P, N, or M is a localized country,
set C to that value. If C has only one zone, return
it.</font>
<ul>
<li><font color="#000000">For example, "Italy Time (xxx)"
or "xxx (Italy)" =&gt; Europe/Rome</font></li>
<li><font color="#000000">For example, "xxx (Canada)" or
"Canada Time (xxx)" =&gt; Sets C = CA and
continues</font></li>
</ul>
</li>
<li>
<font color="#000000">If P is a localized exemplar city
name (and not metazone), return it.</font>
<ul>
<li><font color="#000000">For example, "xxxx (Phoenix)"
or "Phoenix (xxx)" =&gt; America/Phoenix</font></li>
</ul>
</li>
<li>
<font color="#000000">If N, or M is a localized time zone
name (and not metazone), return it.</font>
<ul>
<li><font color="#000000">For example, "Pacific Standard
Time (xxx)" =&gt; "America/Los_Angeles" // this is only
if "Pacific Standard Time" is not a metazone
localization.</font></li>
</ul>
</li>
<li>
<font color="#000000">If N or M is a localized
metazone</font>
<ul>
<li><font color="#000000">If it corresponds to only one
TZID, return it.</font></li>
<li><font color="#000000">If C is set, look up the
Metazone + Country =&gt; TZID mapping, and return that
value if it exists</font></li>
<li><font color="#000000">Get the locale's language, and
get the default country from that. Look up the Metazone +
DefaultCountry =&gt; TZID mapping, and return that value
if it exists.</font></li>
<li><font color="#000000">Otherwise, lookup Metazone +
001 =&gt; TZID and return it (that will always
exist)</font></li>
</ul>
</li>
<li><font color="#000000">If you get this far, return an
error.</font></li>
</ol>
<blockquote>
<p><b>Note:</b> This CLDR date parsing recommendation does
not fully handle all RFC 788 date/time formats, nor is it
intended to.</p>
</blockquote>
<p>Parsing can be more lenient than the above, allowing for
different spacing, punctuation, or other variation. A stricter
parse would check for consistency between the xxx portions
above and the rest, so "Pacific Standard Time (India)" would
give an error.</p>
<p>Using this process, a correct parse will roundtrip the
location format (VVVV) back to the canonical zoneid.</p>
<ul>
<li>Australia/ACT → Australia/Sydney → “Sydney (Australia)” →
Australia/Sydney</li>
</ul>
<p>The GMT formats (Z and ZZZZ) will return back an offset, and
thus lose the original canonical zone id.</p>
<ul>
<li>Australia/ACT → Australia/Sydney → "GMT+11:00" →
GMT+11</li>
</ul>
<p>The daylight and standard time formats, and the non-location
formats (z, zzzz, v, and vvvv) may either roundtrip back to the
original canonical zone id, to a zone in the same metazone that
time, or to just an offset, depending on the available
translation data. Thus:</p>
<ul>
<li>Australia/ACT → Australia/Sydney → "GMT+11:00" →
GMT+11</li>
<li>PST8PDT → America/Los_Angeles → “PST” →
America/Los_Angeles</li>
<li>America/Vancouver → “Pacific Time (Canada)” →
America/Vancouver</li>
</ul>
<h2>8 <a name="Date_Format_Patterns" href=
"#Date_Format_Patterns" id="Date_Format_Patterns">Date Format
Patterns</a></h2>
<p>A date pattern is a character string consisting of two types
of elements:</p>
<ul>
<li><em>Pattern fields</em>, which repeat a specific
<em>pattern character</em> one or more times. These fields
are replaced with date and time data from a calendar when
formatting, or used to generate data for a calendar when
parsing. Currently, A..Z and a..z are reserved for use as
pattern characters (unless they are quoted, see next item).
The pattern characters currently defined, and the meaning of
different fields lengths for then, are listed in the Date
Field Symbol Table below.</li>
<li>Literal text, which is output as-is when formatting, and
must closely match when parsing. Literal text can include:
<ul>
<li>Any characters other than A..Z and a..z, including
spaces and punctuation.</li>
<li>Any text between single vertical quotes ('xxxx'),
which may include A..Z and a..z as literal text.</li>
<li>Two adjacent single vertical quotes (''), which
represent a literal single quote, either inside or
outside quoted text.</li>
</ul>
</li>
</ul>
<p>The following are examples:</p>
<table border="1" cellpadding="0" cellspacing="0" style=
"border-style: solid; border-collapse: collapse">
<caption>
<a name="Date_Format_Pattern_Examples" href=
"#Date_Format_Pattern_Examples" id=
"Date_Format_Pattern_Examples">Date Format Pattern
Examples</a>
</caption>
<tr>
<th width="50%">Pattern</th>
<th width="50%">Result (in a particular locale)</th>
</tr>
<tr>
<td width="50%">yyyy.MM.dd G 'at' HH:mm:ss zzz</td>
<td width="50%">1996.07.10 AD at 15:08:56 PDT</td>
</tr>
<tr>
<td width="50%">EEE, MMM d, ''yy</td>
<td width="50%">Wed, July 10, '96</td>
</tr>
<tr>
<td width="50%">h:mm a</td>
<td width="50%">12:08 PM</td>
</tr>
<tr>
<td width="50%">hh 'o''clock' a, zzzz</td>
<td width="50%">12 o'clock PM, Pacific Daylight Time</td>
</tr>
<tr>
<td width="50%">K:mm a, z</td>
<td width="50%">0:00 PM, PST</td>
</tr>
<tr>
<td width="50%">yyyyy.MMMM.dd GGG hh:mm aaa</td>
<td width="50%">01996.July.10 AD 12:08 PM</td>
</tr>
</table>
<p><i>When parsing using a pattern, a lenient parse should be
used; see <a href="#Parsing_Dates_Times">Parsing Dates and
Times</a>.</i></p>
<p class="dtd">&lt;!ATTLIST pattern numbers CDATA #IMPLIED
&gt;</p>
<p>The numbers attribute is used to indicate that numeric
quantities in the pattern are to be rendered using a numbering
system other than then default numbering system defined for the
given locale. The attribute can be in one of two forms. If the
alternate numbering system is intended to apply to ALL numeric
quantities in the pattern, then simply use the numbering system
ID as found in <a href=
"tr35-numbers.html#Numbering_Systems">Numbering Systems</a>. To
apply the alternate numbering system only to a single field,
the syntax "&lt;letter&gt;=&lt;numberingSystem&gt;" can be used
one or more times, separated by semicolons.</p>
<p class="xmlExample">Examples:<br>
&lt;pattern numbers="hebr"&gt;dd/mm/yyyy&lt;/pattern&gt;<br>
&lt;!-- Use Hebrew numerals to represent numbers in the Hebrew
calendar, where "latn" numbering system is the default
--&gt;<br>
<br>
&lt;pattern numbers="y=hebr"&gt;dd/mm/yyyy&lt;/pattern&gt;<br>
&lt;!-- Same as above, except that ONLY the year value would be
rendered in Hebrew --&gt;<br>
<br>
&lt;pattern
numbers="d=thai;m=hans;y=deva"&gt;dd/mm/yyyy&lt;/pattern&gt;<br>
&lt;!-- Illustrates use of multiple numbering systems for a
single pattern. --&gt;</p><br>
<p><strong>Pattern fields and the Date Field Symbol
Table</strong></p>
<p>The Date Field Symbol Table below shows the pattern
characters (Sym.) and associated fields used in date patterns.
The length of the pattern field is related to the length and
style used to format the data item. For numeric-only fields,
the field length typically indicates the minimum number of
digits that should be used to display the value (zero-padding
as necessary). As an example using pattern character ‘H’ for
hour (24-hour cycle) and values 5 and 11, a field “H” should
produce formatted results “5” and “11” while a field “HH”
should produce formatted results “05” and “11”. For
alphanumeric fields (such as months) and alphabetic-only fields
(such as era names), the relationship between field length and
formatted result may be more complex. Typically this is as
follows:</p>
<table cellspacing="0" cellpadding="2" border="1">
<tr>
<th>Pattern field<br>
length</th>
<th>Typical style,<br>
alphanumeric item</th>
<th>Typical style,<br>
alpha-only item</th>
</tr>
<tr>
<td>1</td>
<td>Numeric, 1-2 digits (e.g. M)</td>
<td rowspan="3">Abbreviated (e.g. E, EE, EEE)</td>
</tr>
<tr>
<td>2</td>
<td>Numeric, 2 digits (e.g. MM)</td>
</tr>
<tr>
<td>3</td>
<td>Abbreviated (e.g. MMM)</td>
</tr>
<tr>
<td>4</td>
<td colspan="2">Wide / Long / Full (e.g. MMMM, EEEE)</td>
</tr>
<tr>
<td>5</td>
<td colspan="2">Narrow (e.g. MMMMM, EEEEE)<br>
(The counter-intuitive use of 5 letters for this is forced
by backwards compatibility)</td>
</tr>
</table>
<p>Notes for the table below:</p>
<ul>
<li>Any sequence of pattern characters other than those
listed below is invalid. Invalid pattern fields should be
handled for formatting and parsing as described in <a href=
"tr35.html#Invalid_Patterns">Handling Invalid
Patterns</a>.</li>
<li>The examples in the table below are merely illustrative
and may not reflect current actual data.</li>
</ul>
<table cellspacing="0" cellpadding="2" border="1">
<caption>
<a name="Date_Field_Symbol_Table" href=
"#Date_Field_Symbol_Table" id=
"Date_Field_Symbol_Table">Date Field Symbol Table</a>
</caption>
<tr>
<th>Field<br>
Type</th>
<th style="text-align: center">Sym.</th>
<th style="text-align: center">Field<br>
Patterns</th>
<th>Examples</th>
<th colspan="2">Description</th>
</tr>
<tr>
<th rowspan="3" style=
"vertical-align: top; text-align: left"><a name='dfst-era'
href='#dfst-era' id="dfst-era">era</a></th>
<td style="text-align: center; vertical-align: top"
rowspan="3">G</td>
<td style="text-align: center; vertical-align: top">
G..GGG</td>
<td style="vertical-align: top; text-align: left">AD<br>
[variant: CE]</td>
<td style="width:130px">Abbreviated</td>
<td rowspan="3" style=
"vertical-align: top; text-align: left">Era name. Era
string for the current date.</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
GGGG</td>
<td style="vertical-align: top; text-align: left">Anno
Domini<br>
[variant: Common Era]</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
GGGGG</td>
<td style="vertical-align: top; text-align: left">A</td>
<td>Narrow</td>
</tr>
<tr>
<th rowspan="15"><a name='dfst-year' href='#dfst-year' id=
"dfst-year">year</a><a name="Year_Length_Examples" id=
"Year_Length_Examples"></a></th>
<td rowspan="5" style="text-align: center">y</td>
<td style="text-align: center">y</td>
<td>2, 20, 201, 2017, 20173</td>
<td rowspan="5" colspan="2">Calendar year (numeric). In
most cases the length of the y field specifies the minimum
number of digits to display, zero-padded as necessary; more
digits will be displayed if needed to show the full year.
However, “yy” requests just the two low-order digits of the
year, zero-padded as necessary. For most use cases, “y” or
“yy” should be adequate.</td>
</tr>
<tr>
<td style="text-align: center">yy</td>
<td>02, 20, 01, 17, 73</td>
</tr>
<tr>
<td style="text-align: center">yyy</td>
<td>002, 020, 201, 2017, 20173</td>
</tr>
<tr>
<td style="text-align: center">yyyy</td>
<td>0002, 0020, 0201, 2017, 20173</td>
</tr>
<tr>
<td style="text-align: center">yyyyy+</td>
<td>...</td>
</tr>
<tr>
<td rowspan="5" style="text-align: center">Y</td>
<td style="text-align: center">Y</td>
<td>2, 20, 201, 2017, 20173</td>
<td rowspan="5" colspan="2">Year in “Week of Year” based
calendars in which the year transition occurs on a week
boundary; may differ from calendar year ‘y’ near a year
transition. This numeric year designation is used in
conjunction with pattern character ‘w’ in the ISO year-week
calendar as defined by ISO 8601, but can be used in
non-Gregorian based calendar systems where week date
processing is desired. The field length is interpreted in
the same was as for ‘y’; that is, “yy”&nbsp;specifies use
of the two low-order year digits, while any other field
length specifies a minimum number of digits to
display.</td>
</tr>
<tr>
<td style="text-align: center">YY</td>
<td>02, 20, 01, 17, 73</td>
</tr>
<tr>
<td style="text-align: center">YYY</td>
<td>002, 020, 201, 2017, 20173</td>
</tr>
<tr>
<td style="text-align: center">YYYY</td>
<td>0002, 0020, 0201, 2017, 20173</td>
</tr>
<tr>
<td style="text-align: center">YYYYY+</td>
<td>...</td>
</tr>
<tr>
<td style="text-align: center">u</td>
<td style="text-align: center">u+</td>
<td>4601</td>
<td colspan="2">Extended year (numeric). This is a single
number designating the year of this calendar system,
encompassing all supra-year fields. For example, for the
Julian calendar system, year numbers are positive, with an
era of BCE or CE. An extended year value for the Julian
calendar system assigns positive values to CE years and
negative values to BCE years, with 1 BCE being year 0. For
‘u’, all field lengths specify a minimum number of digits;
there is no special interpretation for “uu”.</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top"
rowspan="3">U</td>
<td style="text-align: center; vertical-align: top">
U..UUU</td>
<td style="vertical-align: top; text-align: left">甲子</td>
<td>Abbreviated</td>
<td rowspan="3" style=
"vertical-align: top; text-align: left">Cyclic year name.
Calendars such as the Chinese lunar calendar (and related
calendars) and the Hindu calendars use 60-year cycles of
year names. If the calendar does not provide cyclic year
name data, or if the year value to be formatted is out of
the range of years for which cyclic name data is provided,
then numeric formatting is used (behaves like 'y').<br>
Currently the data only provides abbreviated names, which
will be used for all requested name widths.</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
UUUU</td>
<td style="vertical-align: top; text-align: left">甲子 [for
now]</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
UUUUU</td>
<td style="vertical-align: top; text-align: left">甲子 [for
now]</td>
<td>Narrow</td>
</tr>
<tr>
<td>r</td>
<td style="text-align: center; vertical-align: top">r+</td>
<td>2017</td>
<td colspan="2">Related Gregorian year (numeric). For
non-Gregorian calendars, this corresponds to the extended
Gregorian year in which the calendar’s year begins. Related
Gregorian years are often displayed, for example, when
formatting dates in the Japanese calendar — e.g.
“2012(平成24)年1月15日” — or in the Chinese calendar — e.g.
“2012壬辰年腊月初四”. The related Gregorian year is usually
displayed using the "latn" numbering system, regardless of
what numbering systems may be used for other parts of the
formatted date. If the calendar’s year is linked to the
solar year (perhaps using leap months), then for that
calendar the ‘r’ year will always be at a fixed offset from
the ‘u’ year. For the Gregorian calendar, the ‘r’ year is
the same as the ‘u’ year. For ‘r’, all field lengths
specify a minimum number of digits; there is no special
interpretation for “rr”.</td>
</tr>
<tr>
<th rowspan="10" style=
"vertical-align: top; text-align: left"><a name=
'dfst-quarter' href='#dfst-quarter' id=
"dfst-quarter">quarter</a></th>
<td style="text-align: center; vertical-align: top"
rowspan="5">Q</td>
<td style="text-align: center; vertical-align: top">Q</td>
<td style="vertical-align: top; text-align: left">2</td>
<td>Numeric: 1 digit</td>
<td rowspan="5">Quarter number/name.</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">QQ</td>
<td style="vertical-align: top; text-align: left">02</td>
<td>Numeric: 2 digits + zero pad</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
QQQ</td>
<td style="vertical-align: top; text-align: left">Q2</td>
<td>Abbreviated</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
QQQQ</td>
<td style="vertical-align: top; text-align: left">2nd
quarter</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
QQQQQ</td>
<td style="vertical-align: top; text-align: left">2</td>
<td>Narrow</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top"
rowspan="5">q</td>
<td style="text-align: center; vertical-align: top">q</td>
<td style="vertical-align: top; text-align: left">2</td>
<td>Numeric: 1 digit</td>
<td rowspan="5" style=
"vertical-align: top; text-align: left"><b>Stand-Alone</b>
Quarter number/name.</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">qq</td>
<td style="vertical-align: top; text-align: left">02</td>
<td>Numeric: 2 digits + zero pad</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
qqq</td>
<td style="vertical-align: top; text-align: left">Q2</td>
<td>Abbreviated</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
qqqq</td>
<td style="vertical-align: top; text-align: left">2nd
quarter</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
qqqqq</td>
<td style="vertical-align: top; text-align: left">2</td>
<td>Narrow</td>
</tr>
<tr>
<th rowspan="11" style=
"vertical-align: top; text-align: left"><a name=
'dfst-month' href='#dfst-month' id=
"dfst-month">month</a></th>
<td rowspan="5" style=
"text-align: center; vertical-align: top">M</td>
<td style="text-align: center; vertical-align: top">M</td>
<td>9, 12</td>
<td>Numeric: minimum digits</td>
<td rowspan="5" style=
"vertical-align: top; text-align: left">Month number/name,
format style (intended to be used in conjunction with ‘d’
for day number).</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">MM</td>
<td>09, 12</td>
<td>Numeric: 2 digits, zero pad if needed</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
MMM</td>
<td style="vertical-align: top; text-align: left">Sep</td>
<td>Abbreviated</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
MMMM</td>
<td style="vertical-align: top; text-align: left">
September</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
MMMMM</td>
<td style="vertical-align: top; text-align: left">S</td>
<td>Narrow</td>
</tr>
<tr>
<td rowspan="5" style=
"text-align: center; vertical-align: top">L</td>
<td style="text-align: center; vertical-align: top">L</td>
<td>9, 12</td>
<td>Numeric: minimum digits</td>
<td rowspan="5"><b>Stand-Alone</b> Month number/name
(intended to be used without ‘d’ for day number).</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">LL</td>
<td>09, 12</td>
<td>Numeric: 2 digits, zero pad if needed</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
LLL</td>
<td style="vertical-align: top; text-align: left">Sep</td>
<td>Abbreviated</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
LLLL</td>
<td style="vertical-align: top; text-align: left">
September</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
LLLLL</td>
<td style="vertical-align: top; text-align: left">S</td>
<td>Narrow</td>
</tr>
<tr>
<td style="text-align: center">l</td>
<td style="text-align: center">l</td>
<td>[nothing]</td>
<td colspan="2">This pattern character is deprecated, and
should be ignored in patterns. It was originally intended
to be used in combination with M to indicate placement of
the symbol for leap month in the Chinese calendar.
Placement of that marker is now specified using
locale-specific &lt;monthPatterns&gt; data, and formatting
and parsing of that marker should be handled as part of
supporting the regular M and L pattern characters.</td>
</tr>
<tr>
<th rowspan="3"><a name='dfst-week' href='#dfst-week' id=
"dfst-week">week</a></th>
<td rowspan="2" style="text-align: center">w</td>
<td style="text-align: center">w</td>
<td>8, 27</td>
<td>Numeric: minimum digits</td>
<td rowspan="2">Week of Year (numeric). When used in a
pattern with year, use ‘Y’ for the year field instead of
‘y’.</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">ww</td>
<td>08, 27</td>
<td>Numeric: 2 digits, zero pad if needed</td>
</tr>
<tr>
<td style="text-align: center">W</td>
<td style="text-align: center">W</td>
<td>3</td>
<td>Numeric: 1 digit</td>
<td>Week of Month (numeric)</td>
</tr>
<tr>
<th rowspan="5"><a name='dfst-day' href='#dfst-day' id=
"dfst-day">day</a></th>
<td rowspan="2" style="text-align: center">d</td>
<td style="text-align: center">d</td>
<td>1</td>
<td>Numeric: minimum digits</td>
<td rowspan="2">Day of month (numeric).</td>
</tr>
<tr>
<td style="text-align: center">dd</td>
<td>01</td>
<td>Numeric: 2 digits, zero pad if needed</td>
</tr>
<tr>
<td style="text-align: center">D</td>
<td style="text-align: center">D...DDD</td>
<td>345</td>
<td colspan="2">Day of year (numeric). The field length
specifies the minimum number of digits, with zero-padding
as necessary.</td>
</tr>
<tr>
<td style="text-align: center">F</td>
<td style="text-align: center">F</td>
<td>2</td>
<td colspan="2">Day of Week in Month (numeric). The example
is for the 2nd Wed in July</td>
</tr>
<tr>
<td style="text-align: center">g</td>
<td style="text-align: center">g+</td>
<td>2451334</td>
<td colspan="2">Modified Julian day (numeric). This is
different from the conventional Julian day number in two
regards. First, it demarcates days at local zone midnight,
rather than noon GMT. Second, it is a local number; that
is, it depends on the local time zone. It can be thought of
as a single number that encompasses all the date-related
fields.The field length specifies the minimum number of
digits, with zero-padding as necessary.</td>
</tr>
<tr>
<th rowspan="15" style=
"vertical-align: top; text-align: left"><a name=
'dfst-weekday' href='#dfst-weekday' id=
"dfst-weekday">week<br>
day</a></th>
<td rowspan="4" style=
"text-align: center; vertical-align: top">E</td>
<td style="text-align: center; vertical-align: top">
E..EEE</td>
<td style="vertical-align: top; text-align: left">Tue</td>
<td>Abbreviated</td>
<td rowspan="4">Day of week name, format style.</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
EEEE</td>
<td style="vertical-align: top; text-align: left">
Tuesday</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
EEEEE</td>
<td style="vertical-align: top; text-align: left">T</td>
<td>Narrow</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
EEEEEE</td>
<td style="vertical-align: top; text-align: left">Tu</td>
<td>Short</td>
</tr>
<tr>
<td rowspan="6" style=
"text-align: center; vertical-align: top">e</td>
<td style="text-align: center; vertical-align: top">e</td>
<td style="vertical-align: top; text-align: left">2</td>
<td>Numeric: 1 digit</td>
<td rowspan="6" style=
"vertical-align: top; text-align: left">Local day of week
number/name, format style. Same as E except adds a numeric
value that will depend on the local starting day of the
week. For this example, Monday is the first day of the
week.</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">ee</td>
<td>02</td>
<td>Numeric: 2 digits + zero pad</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
eee</td>
<td style="vertical-align: top; text-align: left">Tue</td>
<td>Abbreviated</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
eeee</td>
<td style="vertical-align: top; text-align: left">
Tuesday</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
eeeee</td>
<td style="vertical-align: top; text-align: left">T</td>
<td>Narrow</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
eeeeee</td>
<td style="vertical-align: top; text-align: left">Tu</td>
<td>Short</td>
</tr>
<tr>
<td rowspan="5" style=
"text-align: center; vertical-align: top">c</td>
<td style="text-align: center; vertical-align: top">
c..cc</td>
<td style="vertical-align: top; text-align: left">2</td>
<td>Numeric: 1 digit</td>
<td rowspan="5"><b>Stand-Alone</b> local day of week
number/name.</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
ccc</td>
<td style="vertical-align: top; text-align: left">Tue</td>
<td>Abbreviated</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
cccc</td>
<td style="vertical-align: top; text-align: left">
Tuesday</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
ccccc</td>
<td style="vertical-align: top; text-align: left">T</td>
<td>Narrow</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: top">
cccccc</td>
<td style="vertical-align: top; text-align: left">Tu</td>
<td>Short</td>
</tr>
<tr>
<th rowspan="9"><a name='dfst-period' href='#dfst-period'
id="dfst-period">period</a></th>
<td rowspan="3" style="text-align: center">a</td>
<td style="text-align: center">a..aaa</td>
<td>am. [e.g. 12 am.]</td>
<td>Abbreviated</td>
<td rowspan="3"><strong>AM, PM<br></strong> May be upper or
lowercase depending on the locale and other options. The
wide form may be the same as the short form if the “real”
long form (eg <em>ante meridiem</em>) is not customarily
used. The narrow form must be unique, unlike some other
fields. See also Section 9 <a href=
"#Parsing_Dates_Times">Parsing Dates and Times</a>.</td>
</tr>
<tr>
<td style="text-align: center">aaaa</td>
<td>am. [e.g. 12 am.]</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center">aaaaa</td>
<td>a [e.g. 12a]</td>
<td>Narrow</td>
</tr>
<tr>
<td rowspan="3" style="text-align: center">b</td>
<td style="text-align: center">b..bbb</td>
<td>mid. [e.g. 12 mid.]</td>
<td>Abbreviated</td>
<td rowspan="3"><strong>am, pm, noon, midnight</strong><br>
May be upper or lowercase depending on the locale and other
options. If the locale doesn't the notion of a unique
"noon" = 12:00, then the PM form may be substituted.
Similarly for "midnight" = 00:00 and the AM form. The
narrow form must be unique, unlike some other fields.</td>
</tr>
<tr>
<td style="text-align: center">bbbb</td>
<td>midnight<br>
[e.g. 12 midnight]</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center">bbbbb</td>
<td>md [e.g. 12 md]</td>
<td>Narrow</td>
</tr>
<tr>
<td rowspan="3" style="text-align: center">B</td>
<td style="text-align: center">B..BBB</td>
<td>at night<br>
[e.g. 3:00 at night]</td>
<td>Abbreviated</td>
<td rowspan="3"><strong>flexible day periods</strong><br>
May be upper or lowercase depending on the locale and other
options. Often there is only one width that is customarily
used.</td>
</tr>
<tr>
<td style="text-align: center">BBBB</td>
<td>at night<br>
[e.g. 3:00 at night]</td>
<td>Wide</td>
</tr>
<tr>
<td style="text-align: center">BBBBB</td>
<td>at night<br>
[e.g. 3:00 at night]</td>
<td>Narrow</td>
</tr>
<tr>
<th rowspan="22"><a name='dfst-hour' href='#dfst-hour' id=
"dfst-hour">hour</a></th>
<td rowspan="2" style="text-align: center">h</td>
<td style="text-align: center">h</td>
<td>1, 12</td>
<td>Numeric: minimum digits</td>
<td rowspan="2">Hour [1-12]. When used in skeleton data or
in a skeleton passed in an API for flexible date pattern
generation, it should match the 12-hour-cycle format
preferred by the locale (h or K); it should not match a
24-hour-cycle format (H or k).</td>
</tr>
<tr>
<td style="text-align: center">hh</td>
<td>01, 12</td>
<td>Numeric: 2 digits, zero pad if needed</td>
</tr>
<tr>
<td rowspan="2" style="text-align: center">H</td>
<td style="text-align: center">H</td>
<td>0, 23</td>
<td>Numeric: minimum digits</td>
<td rowspan="2">Hour [0-23]. When used in skeleton data or
in a skeleton passed in an API for flexible date pattern
generation, it should match the 24-hour-cycle format
preferred by the locale (H or k); it should not match a
12-hour-cycle format (h or K).</td>
</tr>
<tr>
<td style="text-align: center">HH</td>
<td>00, 23</td>
<td>Numeric: 2 digits, zero pad if needed</td>
</tr>
<tr>
<td rowspan="2" style="text-align: center">K</td>
<td style="text-align: center">K</td>
<td>0, 11</td>
<td>Numeric: minimum digits</td>
<td rowspan="2">Hour [0-11]. When used in a skeleton, only
matches K or h, see above.</td>
</tr>
<tr>
<td style="text-align: center">KK</td>
<td>00, 11</td>
<td>Numeric: 2 digits, zero pad if needed</td>
</tr>
<tr>
<td rowspan="2" style="text-align: center">k</td>
<td style="text-align: center">k</td>
<td>1, 24</td>
<td>Numeric: minimum digits</td>
<td rowspan="2">Hour [1-24]. When used in a skeleton, only
matches k or H, see above.</td>
</tr>
<tr>
<td style="text-align: center">kk</td>
<td>01, 24</td>
<td>Numeric: 2 digits, zero pad if needed</td>
</tr>
<tr>
<td rowspan="6" style="text-align: center">j</td>
<td>j</td>
<td>8<br>
8 AM<br>
13<br>
1 PM</td>
<td>Numeric hour (minimum digits), abbreviated dayPeriod if
used</td>
<td rowspan="6"><em><strong>Input skeleton
symbol</strong></em><br>
It must not occur in pattern or skeleton data. Instead, it
is reserved for use in skeletons passed to APIs doing
flexible date pattern generation. In such a context, it
requests the preferred hour format for the locale (h, H, K,
or k), as determined by the <strong>preferred</strong>
attribute of the <strong>hours</strong> element in
supplemental data . In the implementation of such an API,
'j' must be replaced by h, H, K, or k before beginning a
match against availableFormats data.<br>
Note that use of 'j' in a skeleton passed to an API is the
only way to have a skeleton request a locale's preferred
time cycle type (12-hour or 24-hour).</td>
</tr>
<tr>
<td style="text-align: center">jj</td>
<td>08<br>
08 AM<br>
13<br>
01 PM</td>
<td>Numeric hour (2 digits, zero pad if needed),
abbreviated dayPeriod if used</td>
</tr>
<tr>
<td style="text-align: center">jjj</td>
<td>8<br>
8 A.M.<br>
13<br>
1 P.M.</td>
<td>Numeric hour (minimum digits), wide dayPeriod if
used</td>
</tr>
<tr>
<td style="text-align: center">jjjj</td>
<td>08<br>
08 A.M.<br>
13<br>
01 P.M.</td>
<td>Numeric hour (2 digits, zero pad if needed), wide
dayPeriod if used</td>
</tr>
<tr>
<td style="text-align: center">jjjjj</td>
<td>8<br>
8a<br>
13<br>
1p</td>
<td>Numeric hour (minimum digits), narrow dayPeriod if
used</td>
</tr>
<tr>
<td style="text-align: center">jjjjjj</td>
<td>08<br>
08a<br>
13<br>
01p</td>
<td>Numeric hour (2 digits, zero pad if needed), narrow
dayPeriod if used</td>
</tr>
<tr>
<td rowspan="2" style="text-align: center">J</td>
<td style="text-align: center">J</td>
<td>8<br>
8</td>
<td>Numeric hour (minimum digits)</td>
<td rowspan="2"><em><strong>Input skeleton
symbol</strong></em><br>
It must not occur in pattern or skeleton data. Instead, it
is reserved for use in skeletons passed to APIs doing
flexible date pattern generation. In such a context, like
'j', it requests the preferred hour format for the locale
(h, H, K, or k), as determined by the
<strong>preferred</strong> attribute of the
<strong>hours</strong> element in supplemental data.
However, unlike 'j', it requests no dayPeriod marker such
as “am/pm” (It is typically used where there is enough
context that that is not necessary). For example, with
"jmm", 18:00 could appear as “6:00 PM”, while with "Jmm",
it would appear as “6:00” (no PM).</td>
</tr>
<tr>
<td style="text-align: center">JJ</td>
<td>08<br>
08</td>
<td>Numeric hour (2 digits, zero pad if needed)</td>
</tr>
<tr>
<td rowspan="6" style="text-align: center">C</td>
<td style="text-align: center">C</td>
<td>8<br>
8 (morning)</td>
<td>Numeric hour (minimum digits), abbreviated dayPeriod if
used</td>
<td rowspan="6"><em><strong>Input skeleton
symbol</strong></em><br>
It must not occur in pattern or skeleton data. Instead, it
is reserved for use in skeletons passed to APIs doing
flexible date pattern generation. In such a context, like
'j', it requests the preferred hour format for the locale.
However, unlike 'j', it can also select formats such as hb
or hB, since it is based not on the
<strong>preferred</strong> attribute of the
<strong>hours</strong> element in supplemental data, but
instead on the first element of the
<strong>allowed</strong> attribute (which is an ordered
preferrence list. For example, with "Cmm", 18:00 could
appear as “6:00 in the afternoon”.</td>
</tr>
<tr>
<td style="text-align: center">CC</td>
<td>08<br>
08 (morning)</td>
<td>Numeric hour (2 digits, zero pad if needed),
abbreviated dayPeriod if used</td>
</tr>
<tr>
<td style="text-align: center">CCC</td>
<td>8<br>
8 in the morning</td>
<td>Numeric hour (minimum digits), wide dayPeriod if
used</td>
</tr>
<tr>
<td style="text-align: center">CCCC</td>
<td>08<br>
08 in the morning</td>
<td>Numeric hour (2 digits, zero pad if needed), wide
dayPeriod if used</td>
</tr>
<tr>
<td style="text-align: center">CCCCC</td>
<td>8<br>
8 (morn.)</td>
<td>Numeric hour (minimum digits), narrow dayPeriod if
used</td>
</tr>
<tr>
<td style="text-align: center">CCCCCC</td>
<td>08<br>
08 (morn.)</td>
<td>Numeric hour (2 digits, zero pad if needed), narrow
dayPeriod if used</td>
</tr>
<tr>
<th rowspan="2"><a name='dfst-minute' href='#dfst-minute'
id="dfst-minute">minute</a></th>
<td rowspan="2" style="text-align: center">m</td>
<td style="text-align: center">m</td>
<td>8, 59</td>
<td>Numeric: minimum digits</td>
<td rowspan="2">Minute (numeric). Truncated, not
rounded.<br></td>
</tr>
<tr>
<td style="text-align: center">mm</td>
<td>08, 59</td>
<td>Numeric: 2 digits, zero pad if needed</td>
</tr>
<tr>
<th rowspan="4"><a name='dfst-second' href='#dfst-second'
id="dfst-second">second</a></th>
<td rowspan="2" style="text-align: center">s</td>
<td style="text-align: center">s</td>
<td>8, 12</td>
<td>Numeric: minimum digits</td>
<td rowspan="2">Second (numeric). Truncated, not
rounded.<br></td>
</tr>
<tr>
<td style="text-align: center">ss</td>
<td>08, 12</td>
<td>Numeric: 2 digits, zero pad if needed</td>
</tr>
<tr>
<td style="text-align: center">S</td>
<td style="text-align: center">S+</td>
<td>3456</td>
<td colspan="2">Fractional Second (numeric). Truncates,
like other numeric time fields, but in this case to the
number of digits specified by the field length. (Example
shows display using pattern SSSS for seconds value
12.34567)</td>
</tr>
<tr>
<td style="text-align: center">A</td>
<td style="text-align: center">A+</td>
<td>69540000</td>
<td colspan="2">Milliseconds in day (numeric). This field
behaves <i>exactly</i> like a composite of all time-related
fields, not including the zone fields. As such, it also
reflects discontinuities of those fields on DST transition
days. On a day of DST onset, it will jump forward. On a day
of DST cessation, it will jump backward. This reflects the
fact that is must be combined with the offset field to
obtain a unique local time value. The field length
specifies the minimum number of digits, with zero-padding
as necessary.</td>
</tr>
<tr>
<th><a name='dfst-sep' href='#dfst-sep' id=
"dfst-sep">sep.</a></th>
<td>(none def., see note)</td>
<td style="text-align: center"></td>
<td></td>
<td colspan="2">Time separator.<br>
<span class="note"><b><br>
Note:</b> In CLDR 26 the time separator pattern character
was specified to be COLON. This was withdrawn in CLDR 28
due to backward compatibility issues, and no time separator
pattern character is currently defined.</span><br>
<br>
Like the use of "," in number formats, this character in a
date pattern is replaced with the corresponding number
symbol which may depend on the numbering system. For more
information, see <em><strong>Part 3: <a href=
"tr35-numbers.html#Contents">Numbers</a></strong> , Section
2.3 <a href="tr35-numbers.html#Number_Symbols">Number
Symbols</a></em>.</td>
</tr>
<tr>
<th rowspan="23"><a name='dfst-zone' href='#dfst-zone' id=
"dfst-zone">zone</a></th>
<td rowspan="2" style="text-align: center">z</td>
<td style="text-align: center">z..zzz</td>
<td>PDT</td>
<td colspan="2">The <i>short specific non-location
format</i>. Where that is unavailable, falls back to the
<i>short localized GMT format</i> ("O").</td>
</tr>
<tr>
<td style="text-align: center">zzzz</td>
<td>Pacific Daylight Time</td>
<td colspan="2">The <i>long specific non-location
format</i>. Where that is unavailable, falls back to the
<i>long localized GMT format</i> ("OOOO").</td>
</tr>
<tr>
<td rowspan="3" style="text-align: center">Z</td>
<td style="text-align: center">Z..ZZZ</td>
<td>-0800</td>
<td colspan="2">The <i>ISO8601 basic format</i> with hours,
minutes and optional seconds fields. The format is
equivalent to RFC 822 zone format (when optional seconds
field is absent). This is equivalent to the "xxxx"
specifier.</td>
</tr>
<tr>
<td style="text-align: center">ZZZZ</td>
<td>GMT-8:00</td>
<td colspan="2">The <i>long localized GMT format</i>. This
is equivalent to the "OOOO" specifier.</td>
</tr>
<tr>
<td style="text-align: center">ZZZZZ</td>
<td>-08:00<br>
-07:52:58</td>
<td colspan="2">The <i>ISO8601 extended format</i> with
hours, minutes and optional seconds fields. The ISO8601 UTC
indicator "Z" is used when local time offset is 0. This is
equivalent to the "XXXXX" specifier.</td>
</tr>
<tr>
<td rowspan="2" style="text-align: center">O</td>
<td style="text-align: center">O</td>
<td>GMT-8</td>
<td colspan="2">The <i>short localized GMT format</i>.</td>
</tr>
<tr>
<td style="text-align: center">OOOO</td>
<td>GMT-08:00</td>
<td colspan="2">The <i>long localized GMT format</i>.</td>
</tr>
<tr>
<td rowspan="2" style="text-align: center">v</td>
<td style="text-align: center">v</td>
<td>PT</td>
<td colspan="2">The <i>short generic non-location
format</i>. Where that is unavailable, falls back to the
<i>generic location format</i> ("VVVV"), then the <i>short
localized GMT format</i> as the final fallback.</td>
</tr>
<tr>
<td style="text-align: center">vvvv</td>
<td>Pacific Time</td>
<td colspan="2">The <i>long generic non-location
format</i>. Where that is unavailable, falls back to
<i>generic location format</i> ("VVVV").</td>
</tr>
<tr>
<td rowspan="4" style="text-align: center">V</td>
<td style="text-align: center">V</td>
<td>uslax</td>
<td colspan="2">The short time zone ID. Where that is
unavailable, the special short time zone ID <i>unk</i>
(Unknown Zone) is used.<br>
<i><b>Note</b>: This specifier was originally used for a
variant of the short specific non-location format, but it
was deprecated in the later version of this specification.
In CLDR 23, the definition of the specifier was changed to
designate a short time zone ID.</i></td>
</tr>
<tr>
<td style="text-align: center">VV</td>
<td>America/Los_Angeles</td>
<td colspan="2">The long time zone ID.</td>
</tr>
<tr>
<td style="text-align: center">VVV</td>
<td>Los Angeles</td>
<td colspan="2">The exemplar city (location) for the time
zone. Where that is unavailable, the localized exemplar
city name for the special zone <i>Etc/Unknown</i> is used
as the fallback (for example, "Unknown City").</td>
</tr>
<tr>
<td style="text-align: center">VVVV</td>
<td>Los Angeles Time</td>
<td colspan="2">The <i>generic location format</i>. Where
that is unavailable, falls back to the <i>long localized
GMT format</i> ("OOOO"; Note: Fallback is only necessary
with a GMT-style Time Zone ID, like Etc/GMT-830.)<br>
This is especially useful when presenting possible timezone
choices for user selection, since the naming is more
uniform than the "v" format.</td>
</tr>
<tr>
<td rowspan="5" style="text-align: center">X</td>
<td style="text-align: center">X</td>
<td>-08<br>
+0530<br>
Z</td>
<td colspan="2">The <i>ISO8601 basic format</i> with hours
field and optional minutes field. The ISO8601 UTC indicator
"Z" is used when local time offset is 0. (The same as x,
plus "Z".)</td>
</tr>
<tr>
<td style="text-align: center">XX</td>
<td>-0800<br>
Z</td>
<td colspan="2">The <i>ISO8601 basic format</i> with hours
and minutes fields. The ISO8601 UTC indicator "Z" is used
when local time offset is 0. (The same as xx, plus
"Z".)</td>
</tr>
<tr>
<td style="text-align: center">XXX</td>
<td>-08:00<br>
Z</td>
<td colspan="2">The <i>ISO8601 extended format</i> with
hours and minutes fields. The ISO8601 UTC indicator "Z" is
used when local time offset is 0. (The same as xxx, plus
"Z".)</td>
</tr>
<tr>
<td style="text-align: center">XXXX</td>
<td>-0800<br>
-075258<br>
Z</td>
<td colspan="2">The <i>ISO8601 basic format</i> with hours,
minutes and optional seconds fields. The ISO8601 UTC
indicator "Z" is used when local time offset is 0. (The
same as xxxx, plus "Z".)<br>
<i><b>Note</b>: The seconds field is not supported by the
ISO8601 specification.</i></td>
</tr>
<tr>
<td style="text-align: center">XXXXX</td>
<td>-08:00<br>
-07:52:58<br>
Z</td>
<td colspan="2">The <i>ISO8601 extended format</i> with
hours, minutes and optional seconds fields. The ISO8601 UTC
indicator "Z" is used when local time offset is 0. (The
same as xxxxx, plus "Z".)<br>
<i><b>Note</b>: The seconds field is not supported by the
ISO8601 specification.</i></td>
</tr>
<tr>
<td rowspan="5" style="text-align: center">x</td>
<td style="text-align: center">x</td>
<td>-08<br>
+0530<br>
+00</td>
<td colspan="2">The <i>ISO8601 basic format</i> with hours
field and optional minutes field. (The same as X, minus
"Z".)</td>
</tr>
<tr>
<td style="text-align: center">xx</td>
<td>-0800<br>
+0000</td>
<td colspan="2">The <i>ISO8601 basic format</i> with hours
and minutes fields. (The same as XX, minus "Z".)</td>
</tr>
<tr>
<td style="text-align: center">xxx</td>
<td>-08:00<br>
+00:00</td>
<td colspan="2">The <i>ISO8601 extended format</i> with
hours and minutes fields. (The same as XXX, minus
"Z".)</td>
</tr>
<tr>
<td style="text-align: center">xxxx</td>
<td>-0800<br>
-075258<br>
+0000</td>
<td colspan="2">The <i>ISO8601 basic format</i> with hours,
minutes and optional seconds fields. (The same as XXXX,
minus "Z".)<br>
<i><b>Note</b>: The seconds field is not supported by the
ISO8601 specification.</i></td>
</tr>
<tr>
<td style="text-align: center">xxxxx</td>
<td>-08:00<br>
-07:52:58<br>
+00:00</td>
<td colspan="2">The <i>ISO8601 extended format</i> with
hours, minutes and optional seconds fields. (The same as
XXXXX, minus "Z".)<br>
<i><b>Note</b>: The seconds field is not supported by the
ISO8601 specification.</i></td>
</tr>
</table>
<h3>8.1 <a name="Localized_Pattern_Characters" href=
"#Localized_Pattern_Characters" id=
"Localized_Pattern_Characters">Localized Pattern Characters
(deprecated)</a></h3>
<p>These are characters that can be used when displaying a date
pattern to an end user. This can occur, for example, when a
spreadsheet allows users to specify date patterns. Whatever is
in the string is substituted one-for-one with the characters
"GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr", with the above meanings.
Thus, for example, if 'J' is to be used instead of 'Y' to mean
Year (for Week of Year), then the string would be:
"GyMdkHmsSEDFwWahKz<u>J</u>eugAZvcLQqVUOXxr".</p>
<p>This element is deprecated. It is recommended instead that a
more sophisticated UI be used for localization, such as using
icons to represent the different formats (and lengths) in the
<a href="#Date_Field_Symbol_Table">Date Field Symbol
Table</a>.</p>
<h3>8.2 <a name="Date_Patterns_AM_PM" href=
"#Date_Patterns_AM_PM" id="Date_Patterns_AM_PM">AM /
PM</a></h3>
<p>Even for countries where the customary date format only has
a 24 hour format, both the am and pm localized strings must be
present and must be distinct from one another. Note that as
long as the 24 hour format is used, these strings will normally
never be used, but for testing and unusual circumstances they
must be present.</p>
<h3>8.3 <a name="Date_Patterns_Eras" href="#Date_Patterns_Eras"
id="Date_Patterns_Eras">Eras</a></h3>
<p>There are only two values for era in the Gregorian calendar,
with two common naming conventions (here in abbreviated form
for English): "BC" and "AD", or "BCE" and "CE". These values
can be translated into other languages, like "a.C." and and
"d.C." for Spanish, but there are no other eras in the
Gregorian calendar. Other calendars have a different numbers of
eras. Care should be taken when translating the era names for a
specific calendar.</p>
<h3>8.4 <a name="Date_Patterns_Week_Of_Year" href=
"#Date_Patterns_Week_Of_Year" id=
"Date_Patterns_Week_Of_Year">Week of Year</a></h3>
<p>Values calculated for the Week of Year field range from 1 to
53 for the Gregorian calendar (they may have different ranges
for other calendars). Week 1 for a year is the first week that
contains at least the specified minimum number of days from
that year. Weeks between week 1 of one year and week 1 of the
following year are numbered sequentially from 2 to 52 or 53 (if
needed). For example, January 1, 1998 was a Thursday. If the
first day of the week is MONDAY and the minimum days in a week
is 4 (these are the values reflecting ISO 8601 and many
national standards), then week 1 of 1998 starts on December 29,
1997, and ends on January 4, 1998. However, if the first day of
the week is SUNDAY, then week 1 of 1998 starts on January 4,
1998, and ends on January 10, 1998. The first three days of
1998 are then part of week 53 of 1997.</p>
<p>Values are similarly calculated for the Week of Month.</p>
<h3>8.5 <a name="Date_Patterns_Week_Elements" href=
"#Date_Patterns_Week_Elements" id=
"Date_Patterns_Week_Elements">Week Elements</a></h3>
<dl>
<dt><b>firstDay</b></dt>
<dd>A number indicating which day of the week is considered
the 'first' day, for calendar purposes. Because the ordering
of days may vary between calendar, keywords are used for this
value, such as sun, mon, …. These values will be replaced by
the localized name when they are actually used.</dd>
<dt><b>minDays (Minimal Days in First Week)</b></dt>
<dd>Minimal days required in the first week of a month or
year. For example, if the first week is defined as one that
contains at least one day, this value will be 1. If it must
contain a full seven days before it counts as the first week,
then the value would be 7.</dd>
<dt><b>weekendStart, weekendEnd</b></dt>
<dd>Indicates the day and time that the weekend starts or
ends. As with firstDay, keywords are used instead of
numbers.</dd>
</dl>
<h2>9 <a name="Parsing_Dates_Times" href="#Parsing_Dates_Times"
id="Parsing_Dates_Times">Parsing Dates and Times</a></h2>
<p>For general information on lenient parsing, see <a href=
"tr35.html#Lenient_Parsing">Lenient Parsing</a> in the core
specification. This section provides additional information
specific to parsing of dates and times.</p>
<p>Lenient parsing of date and time strings is especially
complicated, due to the large number of possible fields and
formats. The fields fall into two categories: numeric fields
(hour, day of month, year, numeric month, and so on) and
symbolic fields (era, quarter, month, weekday, AM/PM, time
zone). In addition, the user may type in a date or time in a
form that is significantly different from the normal format for
the locale, and the application must use the locale information
to figure out what the user meant. Input may well consist of
nothing but a string of numbers with separators, for example,
"09/05/02 09:57:33".</p>
<p>The input can be separated into tokens: numbers, symbols,
and literal strings. Some care must be taken due to ambiguity,
for example, in the Japanese locale the symbol for March is "3
月", which looks like a number followed by a literal. To avoid
these problems, symbols should be checked first, and spaces
should be ignored (except to delimit the tokens of the input
string).</p>
<p>The meaning of symbol fields should be easy to determine;
the problem is determining the meaning of the numeric fields.
Disambiguation will likely be most successful if it is based on
heuristics. Here are some rules that can help:</p>
<ul>
<li>Always try the format string expected for the input text
first. This is the only way to disambiguate 03/07 (March
2007, a credit card expiration date) from 03/07 (March 7, a
birthday).</li>
<li>Attempt to match fields and literals against those in the
format string, using loose matching of the tokens. In
particular, Unicode normalization and case variants should be
accepted. Alternate symbols can also be accepted where
unambiguous: for example, “11.30 am”.</li>
<li>When matching symbols, try the narrow, abbreviated, and
full-width forms, including standalone forms if they are
unique. You may want to allow prefix matches too, or
diacritic-insensitive, again, as long as they are unique. For
example, for a month, accept 9, 09, S, Se, Sep, Sept, Sept.,
and so on. For abbreviated symbols (e.g. names of eras,
months, weekdays), allow matches both with and without an
abbreviation marker such as period (or whatever else may be
customary in the locale); abbreviated forms in the CLDR data
may or may not have such a marker.
<ul>
<li>Note: While parsing of narrow date values (e.g. month
or day names) may be required in order to obtain minimum
information from a formatted date (for instance, the only
month information may be in a narrow form), the results
are not guaranteed; parsing of an ambiguous formatted
date string may produce a result that differs from the
date originally used to create the formatted string.</li>
<li>For day periods, ASCII variants for AM/PM such as
“am”, “a.m.”, “am.” (and their case variants) should be
accepted, since they are widely used as alternates to
native formats.</li>
</ul>
</li>
<li>When a field or literal is encountered that is not
compatible with the pattern:
<ul>
<li>Synchronization is not necessary for symbolic fields,
since they are self-identifying. Wait until a numeric
field or literal is encountered before attempting to
resynchronize.</li>
<li>Ignore whether the input token is symbolic or
numeric, if it is compatible with the current field in
the pattern.</li>
<li>Look forward or backward in the current format string
for a literal that matches the one most recently
encountered. See if you can resynchronize from that
point. Use the value of the numeric field to
resynchronize as well, if possible (for example, a number
larger than the largest month cannot be a month)</li>
<li>If that fails, use other format strings from the
locale (including those in &lt;availableFormats&gt;) to
try to match the previous or next symbol or literal
(again, using a loose match).</li>
</ul>
</li>
</ul>
<hr>
<p class="copyright">Copyright © 2001–2019 Unicode, Inc. All
Rights Reserved. The Unicode Consortium makes no expressed or
implied warranty of any kind, and assumes no liability for
errors or omissions. No liability is assumed for incidental and
consequential damages in connection with or arising out of the
use of the information or programs contained or accompanying
this technical report. The Unicode <a href=
"http://unicode.org/copyright.html">Terms of Use</a> apply.</p>
<p class="copyright">Unicode and the Unicode logo are
trademarks of Unicode, Inc., and are registered in some
jurisdictions.</p>
</div>
</body>
</html>