16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1997-2013, International Business Machines Corporation and
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* others. All Rights Reserved.
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File SMPDTFMT.H
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History:
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Date        Name        Description
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   02/19/97    aliu        Converted from java.
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   07/09/97    helena      Make ParsePosition into a class.
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   07/21/98    stephen     Added GMT_PLUS, GMT_MINUS
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                            Changed setTwoDigitStartDate to set2DigitYearStart
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                            Changed getTwoDigitStartDate to get2DigitYearStart
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                            Removed subParseLong
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                            Removed getZoneIndex (added in DateFormatSymbols)
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   06/14/99    stephen     Removed fgTimeZoneDataSuffix
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   10/14/99    aliu        Updated class doc to describe 2-digit year parsing
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                           {j28 4182066}.
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef SMPDTFMT_H
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SMPDTFMT_H
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C++ API: Format and parse dates in a language-independent manner.
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/datefmt.h"
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/udisplaycontext.h"
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass DateFormatSymbols;
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass DateFormat;
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass MessageFormat;
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass FieldPositionHandler;
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass TimeZoneFormat;
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * SimpleDateFormat is a concrete class for formatting and parsing dates in a
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * language-independent manner. It allows for formatting (millis -> text),
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * parsing (text -> millis), and normalization. Formats/Parses a date or time,
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * which is the standard milliseconds since 24:00 GMT, Jan 1, 1970.
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Clients are encouraged to create a date-time formatter using DateFormat::getInstance(),
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * getDateInstance(), getDateInstance(), or getDateTimeInstance() rather than
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * explicitly constructing an instance of SimpleDateFormat.  This way, the client
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is guaranteed to get an appropriate formatting pattern for whatever locale the
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * program is running in.  However, if the client needs something more unusual than
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the default patterns in the locales, he can construct a SimpleDateFormat directly
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and give it an appropriate pattern (or use one of the factory methods on DateFormat
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and modify the pattern after the fact with toPattern() and applyPattern().
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p><strong>Date and Time Patterns:</strong></p>
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Date and time formats are specified by <em>date and time pattern</em> strings.
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Within date and time pattern strings, all unquoted ASCII letters [A-Za-z] are reserved
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as pattern letters representing calendar fields. <code>SimpleDateFormat</code> supports
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the date and time formatting algorithm and pattern letters defined by
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <a href="http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table">UTS#35
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode Locale Data Markup Language (LDML)</a> and further documented for ICU in the
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <a href="https://sites.google.com/site/icuprojectuserguide/formatparse/datetime?pli=1#TOC-Date-Field-Symbol-Table">ICU
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * User Guide</a>. The following pattern letters are currently available:</p>
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <table border="1">
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th>Field</th>
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th style="text-align: center">Sym.</th>
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th style="text-align: center">No.</th>
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th>Example</th>
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th>Description</th>
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th rowspan="3">era</th>
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center" rowspan="3">G</td>
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..3</td>
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>AD</td>
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="3">Era - Replaced with the Era string for the current date. One to three letters for the
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         abbreviated form, four letters for the long form, five for the narrow form.</td>
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Anno Domini</td>
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">5</td>
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>A</td>
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th rowspan="6">year</th>
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">y</td>
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..n</td>
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>1996</td>
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Year. Normally the length specifies the padding, but for two letters it also specifies the maximum
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         length. Example:<div align="center">
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *             <center>
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *             <table border="1" cellpadding="2" cellspacing="0">
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 <tr>
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <th>Year</th>
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <th style="text-align: right">y</th>
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <th style="text-align: right">yy</th>
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <th style="text-align: right">yyy</th>
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <th style="text-align: right">yyyy</th>
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <th style="text-align: right">yyyyy</th>
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 </tr>
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 <tr>
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td>AD 1</td>
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">1</td>
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">01</td>
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">001</td>
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">0001</td>
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">00001</td>
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 </tr>
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 <tr>
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td>AD 12</td>
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">12</td>
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">12</td>
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">012</td>
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">0012</td>
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">00012</td>
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 </tr>
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 <tr>
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td>AD 123</td>
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">123</td>
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">23</td>
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">123</td>
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">0123</td>
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">00123</td>
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 </tr>
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 <tr>
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td>AD 1234</td>
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">1234</td>
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">34</td>
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">1234</td>
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">1234</td>
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">01234</td>
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 </tr>
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 <tr>
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td>AD 12345</td>
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">12345</td>
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">45</td>
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">12345</td>
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">12345</td>
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     <td style="text-align: right">12345</td>
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                 </tr>
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *             </table>
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *             </center></div>
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         </td>
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">Y</td>
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..n</td>
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>1997</td>
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Year (in "Week of Year" based calendars). Normally the length specifies the padding,
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         but for two letters it also specifies the maximum length. This year designation is used in ISO
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         year-week calendar as defined by ISO 8601, but can be used in non-Gregorian based calendar systems
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         where week date processing is desired. May not always be the same value as calendar year.</td>
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">u</td>
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..n</td>
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>4601</td>
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Extended year. This is a single number designating the year of this calendar system, encompassing
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         all supra-year fields. For example, for the Julian calendar system, year numbers are positive, with an
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         era of BCE or CE. An extended year value for the Julian calendar system assigns positive values to CE
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         years and negative values to BCE years, with 1 BCE being year 0.</td>
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center" rowspan="3">U</td>
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..3</td>
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>&#30002;&#23376;</td>
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="3">Cyclic year name. Calendars such as the Chinese lunar calendar (and related calendars)
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         and the Hindu calendars use 60-year cycles of year names. Use one through three letters for the abbreviated
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         name, four for the full name, or five for the narrow name (currently the data only provides abbreviated names,
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         which will be used for all requested name widths). If the calendar does not provide cyclic year name data,
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         or if the year value to be formatted is out of the range of years for which cyclic name data is provided,
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         then numeric formatting is used (behaves like 'y').</td>
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>(currently also &#30002;&#23376;)</td>
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">5</td>
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>(currently also &#30002;&#23376;)</td>
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th rowspan="6">quarter</th>
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="3" style="text-align: center">Q</td>
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>02</td>
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="3">Quarter - Use one or two for the numerical quarter, three for the abbreviation, or four
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         for the full name.</td>
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">3</td>
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Q2</td>
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>2nd quarter</td>
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="3" style="text-align: center">q</td>
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>02</td>
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="3"><b>Stand-Alone</b> Quarter - Use one or two for the numerical quarter, three for the abbreviation,
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         or four for the full name.</td>
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">3</td>
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Q2</td>
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>2nd quarter</td>
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th rowspan="8">month</th>
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="4" style="text-align: center">M</td>
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>09</td>
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="4">Month - Use one or two for the numerical month, three for the abbreviation, four for
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         the full name, or five for the narrow name.</td>
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">3</td>
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Sept</td>
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>September</td>
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">5</td>
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>S</td>
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="4" style="text-align: center">L</td>
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>09</td>
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="4"><b>Stand-Alone</b> Month - Use one or two for the numerical month, three for the abbreviation,
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         or four for the full name, or 5 for the narrow name.</td>
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">3</td>
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Sept</td>
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>September</td>
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">5</td>
2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>S</td>
2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th rowspan="2">week</th>
2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">w</td>
2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>27</td>
2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Week of Year.</td>
2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">W</td>
2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1</td>
2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>3</td>
2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Week of Month</td>
2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th rowspan="4">day</th>
2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">d</td>
2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>1</td>
2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Date - Day of the month</td>
2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">D</td>
2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..3</td>
2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>345</td>
2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Day of year</td>
2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">F</td>
2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1</td>
2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>2</td>
2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Day of Week in Month. The example is for the 2nd Wed in July</td>
2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">g</td>
3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..n</td>
3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>2451334</td>
3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Modified Julian day. This is different from the conventional Julian day number in two regards.
3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         First, it demarcates days at local zone midnight, rather than noon GMT. Second, it is a local number;
3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         that is, it depends on the local time zone. It can be thought of as a single number that encompasses
3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         all the date-related fields.</td>
3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th rowspan="14">week<br>
3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         day</th>
3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="4" style="text-align: center">E</td>
3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..3</td>
3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Tues</td>
3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="4">Day of week - Use one through three letters for the short day, or four for the full name,
3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         five for the narrow name, or six for the short name.</td>
3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Tuesday</td>
3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">5</td>
3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>T</td>
3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">6</td>
3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Tu</td>
3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="5" style="text-align: center">e</td>
3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>2</td>
3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="5">Local day of week. Same as E except adds a numeric value that will depend on the local
3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         starting day of the week, using one or two letters. For this example, Monday is the first day of the week.</td>
3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">3</td>
3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Tues</td>
3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Tuesday</td>
3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">5</td>
3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>T</td>
3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">6</td>
3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Tu</td>
3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="5" style="text-align: center">c</td>
3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1</td>
3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>2</td>
3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="5"><b>Stand-Alone</b> local day of week - Use one letter for the local numeric value (same
3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         as 'e'), three for the short day, four for the full name, five for the narrow name, or six for
3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         the short name.</td>
3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">3</td>
3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Tues</td>
3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Tuesday</td>
3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">5</td>
3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>T</td>
3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">6</td>
3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Tu</td>
3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th>period</th>
3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">a</td>
3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1</td>
3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>AM</td>
3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>AM or PM</td>
3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th rowspan="4">hour</th>
3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">h</td>
3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>11</td>
3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Hour [1-12]. When used in skeleton data or in a skeleton passed in an API for flexible data pattern
3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         generation, it should match the 12-hour-cycle format preferred by the locale (h or K); it should not match
3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         a 24-hour-cycle format (H or k). Use hh for zero padding.</td>
3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">H</td>
3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>13</td>
3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Hour [0-23]. When used in skeleton data or in a skeleton passed in an API for flexible data pattern
3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         generation, it should match the 24-hour-cycle format preferred by the locale (H or k); it should not match a
3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         12-hour-cycle format (h or K). Use HH for zero padding.</td>
3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">K</td>
4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>0</td>
4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Hour [0-11]. When used in a skeleton, only matches K or h, see above. Use KK for zero padding.</td>
4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">k</td>
4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>24</td>
4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Hour [1-24]. When used in a skeleton, only matches k or H, see above. Use kk for zero padding.</td>
4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th>minute</th>
4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">m</td>
4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>59</td>
4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Minute. Use one or two for zero padding.</td>
4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th rowspan="3">second</th>
4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">s</td>
4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..2</td>
4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>12</td>
4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Second. Use one or two for zero padding.</td>
4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">S</td>
4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..n</td>
4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>3456</td>
4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Fractional Second - truncates (like other time fields) to the count of letters.
4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         (example shows display using pattern SSSS for seconds value 12.34567)</td>
4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">A</td>
4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..n</td>
4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>69540000</td>
4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Milliseconds in day. This field behaves <i>exactly</i> like a composite of all time-related fields,
4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         not including the zone fields. As such, it also reflects discontinuities of those fields on DST transition
4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         days. On a day of DST onset, it will jump forward. On a day of DST cessation, it will jump backward. This
4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         reflects the fact that is must be combined with the offset field to obtain a unique local time value.</td>
4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <th rowspan="23">zone</th>
4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="2" style="text-align: center">z</td>
4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..3</td>
4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>PDT</td>
4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>short specific non-location format</i>.
4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Where that is unavailable, falls back to the <i>short localized GMT format</i> ("O").</td>
4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Pacific Daylight Time</td>
4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>long specific non-location format</i>.
4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Where that is unavailable, falls back to the <i>long localized GMT format</i> ("OOOO").</td>
4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="3" style="text-align: center">Z</td>
4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1..3</td>
4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-0800</td>
4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 basic format</i> with hours, minutes and optional seconds fields.
4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         The format is equivalent to RFC 822 zone format (when optional seconds field is absent).
4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         This is equivalent to the "xxxx" specifier.</td>
4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>GMT-8:00</td>
4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>long localized GMT format</i>.
4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         This is equivalent to the "OOOO" specifier.</td>
4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">5</td>
4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-08:00<br>
4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         -07:52:58</td>
4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 extended format</i> with hours, minutes and optional seconds fields.
4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.
4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         This is equivalent to the "XXXXX" specifier.</td>
4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="2" style="text-align: center">O</td>
4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1</td>
4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>GMT-8</td>
4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>short localized GMT format</i>.</td>
4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>GMT-08:00</td>
4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>long localized GMT format</i>.</td>
4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="2" style="text-align: center">v</td>
4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1</td>
4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>PT</td>
4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>short generic non-location format</i>.
4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Where that is unavailable, falls back to the <i>generic location format</i> ("VVVV"),
4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         then the <i>short localized GMT format</i> as the final fallback.</td>
4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Pacific Time</td>
4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>long generic non-location format</i>.
5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Where that is unavailable, falls back to <i>generic location format</i> ("VVVV").
5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="4" style="text-align: center">V</td>
5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1</td>
5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>uslax</td>
5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The short time zone ID.
5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Where that is unavailable, the special short time zone ID <i>unk</i> (Unknown Zone) is used.<br>
5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <i><b>Note</b>: This specifier was originally used for a variant of the short specific non-location format,
5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         but it was deprecated in the later version of the LDML specification. In CLDR 23/ICU 51, the definition of
5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         the specifier was changed to designate a short time zone ID.</i></td>
5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">2</td>
5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>America/Los_Angeles</td>
5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The long time zone ID.</td>
5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">3</td>
5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Los Angeles</td>
5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The exemplar city (location) for the time zone.
5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Where that is unavailable, the localized exemplar city name for the special zone <i>Etc/Unknown</i> is used
5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         as the fallback (for example, "Unknown City"). </td>
5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>Los Angeles Time</td>
5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>generic location format</i>.
5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Where that is unavailable, falls back to the <i>long localized GMT format</i> ("OOOO";
5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Note: Fallback is only necessary with a GMT-style Time Zone ID, like Etc/GMT-830.)<br>
5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         This is especially useful when presenting possible timezone choices for user selection,
5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         since the naming is more uniform than the "v" format.</td>
5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="5" style="text-align: center">X</td>
5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1</td>
5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-08<br>
5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         +0530<br>
5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Z</td>
5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 basic format</i> with hours field and optional minutes field.
5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">2</td>
5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-0800<br>
5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Z</td>
5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 basic format</i> with hours and minutes fields.
5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">3</td>
5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-08:00<br>
5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Z</td>
5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 extended format</i> with hours and minutes fields.
5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-0800<br>
5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         -075258<br>
5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Z</td>
5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 basic format</i> with hours, minutes and optional seconds fields.
5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         (Note: The seconds field is not supported by the ISO8601 specification.)
5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">5</td>
5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-08:00<br>
5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         -07:52:58<br>
5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         Z</td>
5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 extended format</i> with hours, minutes and optional seconds fields.
5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         (Note: The seconds field is not supported by the ISO8601 specification.)
5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td rowspan="5" style="text-align: center">x</td>
5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">1</td>
5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-08<br>
5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         +0530</td>
5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 basic format</i> with hours field and optional minutes field.</td>
5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">2</td>
5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-0800</td>
5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 basic format</i> with hours and minutes fields.</td>
5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">3</td>
5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-08:00</td>
5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 extended format</i> with hours and minutes fields.</td>
5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">4</td>
5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-0800<br>
5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         -075258</td>
5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 basic format</i> with hours, minutes and optional seconds fields.
5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         (Note: The seconds field is not supported by the ISO8601 specification.)</td>
5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     <tr>
5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td style="text-align: center">5</td>
6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>-08:00<br>
6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         -07:52:58</td>
6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         <td>The <i>ISO8601 extended format</i> with hours, minutes and optional seconds fields.
6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         (Note: The seconds field is not supported by the ISO8601 specification.)</td>
6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     </tr>
6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </table>
6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Any characters in the pattern that are not in the ranges of ['a'..'z'] and
6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ['A'..'Z'] will be treated as quoted text. For instance, characters
6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * like ':', '.', ' ', '#' and '@' will appear in the resulting time text
6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * even they are not embraced within single quotes.
6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * A pattern containing any invalid pattern letter will result in a failing
6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UErrorCode result during formatting or parsing.
6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Examples using the US locale:
6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre>
6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code
6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    Format Pattern                         Result
6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    --------------                         -------
6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    "yyyy.MM.dd G 'at' HH:mm:ss vvvv" ->>  1996.07.10 AD at 15:08:56 Pacific Time
6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    "EEE, MMM d, ''yy"                ->>  Wed, July 10, '96
6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    "h:mm a"                          ->>  12:08 PM
6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    "hh 'o''clock' a, zzzz"           ->>  12 o'clock PM, Pacific Daylight Time
6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    "K:mm a, vvv"                     ->>  0:00 PM, PT
6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    "yyyyy.MMMMM.dd GGG hh:mm aaa"    ->>  1996.July.10 AD 12:08 PM
6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode
6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </pre>
6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Code Sample:
6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre>
6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code
6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UErrorCode success = U_ZERO_ERROR;
6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     SimpleTimeZone* pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, "PST");
6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     pdt->setStartRule( Calendar::APRIL, 1, Calendar::SUNDAY, 2*60*60*1000);
6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     pdt->setEndRule( Calendar::OCTOBER, -1, Calendar::SUNDAY, 2*60*60*1000);
6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     // Format the current time.
6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     SimpleDateFormat* formatter
6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss a zzz", success );
6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     GregorianCalendar cal(success);
6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UDate currentTime_1 = cal.getTime(success);
6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     FieldPosition fp(0);
6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UnicodeString dateString;
6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     formatter->format( currentTime_1, dateString, fp );
6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     cout << "result: " << dateString << endl;
6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     // Parse the previous string back into a Date.
6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     ParsePosition pp(0);
6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UDate currentTime_2 = formatter->parse(dateString, pp );
6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode
6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </pre>
6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In the above example, the time value "currentTime_2" obtained from parsing
6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * will be equal to currentTime_1. However, they may not be equal if the am/pm
6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * marker 'a' is left out from the format pattern while the "hour in am/pm"
6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * pattern symbol is used. This information loss can happen when formatting the
6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * time in PM.
6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When parsing a date string using the abbreviated year pattern ("y" or "yy"),
6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * SimpleDateFormat must interpret the abbreviated year
6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * relative to some century.  It does this by adjusting dates to be
6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * within 80 years before and 20 years after the time the SimpleDateFormat
6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * instance is created. For example, using a pattern of "MM/dd/yy" and a
6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * SimpleDateFormat instance created on Jan 1, 1997,  the string
6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * "01/11/12" would be interpreted as Jan 11, 2012 while the string "05/04/64"
6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * would be interpreted as May 4, 1964.
6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * During parsing, only strings consisting of exactly two digits, as defined by
6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code>Unicode::isDigit()</code>, will be parsed into the default century.
6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Any other numeric string, such as a one digit string, a three or more digit
6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * string, or a two digit string that isn't all digits (for example, "-1"), is
6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * interpreted literally.  So "01/02/3" or "01/02/003" are parsed (for the
6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gregorian calendar), using the same pattern, as Jan 2, 3 AD.  Likewise (but
6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * only in lenient parse mode, the default) "01/02/-3" is parsed as Jan 2, 4 BC.
6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the year pattern has more than two 'y' characters, the year is
6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * interpreted literally, regardless of the number of digits.  So using the
6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D.
6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When numeric fields abut one another directly, with no intervening delimiter
6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * characters, they constitute a run of abutting numeric fields.  Such runs are
6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * parsed specially.  For example, the format "HHmmss" parses the input text
6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * "123456" to 12:34:56, parses the input text "12345" to 1:23:45, and fails to
6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * parse "1234".  In other words, the leftmost field of the run is flexible,
6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * while the others keep a fixed width.  If the parse fails anywhere in the run,
6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then the leftmost field is shortened by one character, and the entire run is
6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * parsed again. This is repeated until either the parse succeeds or the
6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * leftmost field is one character in length.  If the parse still fails at that
6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * point, the parse of the run fails.
6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For time zones that have no names, SimpleDateFormat uses strings GMT+hours:minutes or
6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * GMT-hours:minutes.
6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The calendar defines what is the first day of the week, the first week of the
6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * year, whether hours are zero based or not (0 vs 12 or 24), and the timezone.
6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * There is one common number format to handle all the numbers; the digit count
6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is handled programmatically according to the pattern.
7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p><em>User subclasses are not supported.</em> While clients may write
7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * subclasses, such code will not necessarily work and will not be
7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * guaranteed to work stably from release to release.
7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass U_I18N_API SimpleDateFormat: public DateFormat {
7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Construct a SimpleDateFormat using the default pattern for the default
7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * locale.
7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * [Note:] Not all locales support SimpleDateFormat; for full generality,
7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * use the factory methods in the DateFormat class.
7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status    Output param set to success/failure code.
7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat(UErrorCode& status);
7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Construct a SimpleDateFormat using the given pattern and the default locale.
7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The locale is used to obtain the symbols used in formatting (e.g., the
7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * names of the months), but not to provide the pattern.
7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * [Note:] Not all locales support SimpleDateFormat; for full generality,
7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * use the factory methods in the DateFormat class.
7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pattern    the pattern for the format.
7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status     Output param set to success/failure code.
7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat(const UnicodeString& pattern,
7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     UErrorCode& status);
7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Construct a SimpleDateFormat using the given pattern, numbering system override, and the default locale.
7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The locale is used to obtain the symbols used in formatting (e.g., the
7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * names of the months), but not to provide the pattern.
7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * A numbering system override is a string containing either the name of a known numbering system,
7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * or a set of field and numbering system pairs that specify which fields are to be formattied with
7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the alternate numbering system.  For example, to specify that all numeric fields in the specified
7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * date or time pattern are to be rendered using Thai digits, simply specify the numbering system override
7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * as "thai".  To specify that just the year portion of the date be formatted using Hebrew numbering,
7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * use the override string "y=hebrew".  Numbering system overrides can be combined using a semi-colon
7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * character in the override string, such as "d=decimal;M=arabic;y=hebrew", etc.
7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * [Note:] Not all locales support SimpleDateFormat; for full generality,
7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * use the factory methods in the DateFormat class.
7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pattern    the pattern for the format.
7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param override   the override string.
7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status     Output param set to success/failure code.
7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat(const UnicodeString& pattern,
7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     const UnicodeString& override,
7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     UErrorCode& status);
7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Construct a SimpleDateFormat using the given pattern and locale.
7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The locale is used to obtain the symbols used in formatting (e.g., the
7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * names of the months), but not to provide the pattern.
7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * [Note:] Not all locales support SimpleDateFormat; for full generality,
7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * use the factory methods in the DateFormat class.
7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pattern    the pattern for the format.
7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param locale     the given locale.
7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status     Output param set to success/failure code.
7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat(const UnicodeString& pattern,
7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     const Locale& locale,
7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     UErrorCode& status);
7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Construct a SimpleDateFormat using the given pattern, numbering system override, and locale.
7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The locale is used to obtain the symbols used in formatting (e.g., the
7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * names of the months), but not to provide the pattern.
7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * A numbering system override is a string containing either the name of a known numbering system,
7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * or a set of field and numbering system pairs that specify which fields are to be formattied with
7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the alternate numbering system.  For example, to specify that all numeric fields in the specified
7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * date or time pattern are to be rendered using Thai digits, simply specify the numbering system override
7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * as "thai".  To specify that just the year portion of the date be formatted using Hebrew numbering,
7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * use the override string "y=hebrew".  Numbering system overrides can be combined using a semi-colon
7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * character in the override string, such as "d=decimal;M=arabic;y=hebrew", etc.
7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * [Note:] Not all locales support SimpleDateFormat; for full generality,
7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * use the factory methods in the DateFormat class.
7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pattern    the pattern for the format.
7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param override   the numbering system override.
7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param locale     the given locale.
7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status     Output param set to success/failure code.
7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat(const UnicodeString& pattern,
7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     const UnicodeString& override,
7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     const Locale& locale,
7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     UErrorCode& status);
7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Construct a SimpleDateFormat using the given pattern and locale-specific
8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * symbol data.  The formatter takes ownership of the DateFormatSymbols object;
8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the caller is no longer responsible for deleting it.
8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pattern           the given pattern for the format.
8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param formatDataToAdopt the symbols to be adopted.
8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status            Output param set to success/faulure code.
8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat(const UnicodeString& pattern,
8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     DateFormatSymbols* formatDataToAdopt,
8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     UErrorCode& status);
8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Construct a SimpleDateFormat using the given pattern and locale-specific
8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * symbol data.  The DateFormatSymbols object is NOT adopted; the caller
8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * remains responsible for deleting it.
8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pattern           the given pattern for the format.
8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param formatData        the formatting symbols to be use.
8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status            Output param set to success/faulure code.
8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat(const UnicodeString& pattern,
8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     const DateFormatSymbols& formatData,
8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     UErrorCode& status);
8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Copy constructor.
8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat(const SimpleDateFormat&);
8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Assignment operator.
8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat& operator=(const SimpleDateFormat&);
8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Destructor.
8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual ~SimpleDateFormat();
8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Clone this Format object polymorphically. The caller owns the result and
8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * should delete it when done.
8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return    A copy of the object.
8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual Format* clone(void) const;
8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return true if the given Format objects are semantically equal. Objects
8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * of different subclasses are considered unequal.
8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param other    the object to be compared with.
8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return         true if the given Format objects are semantically equal.
8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UBool operator==(const Format& other) const;
8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    using DateFormat::format;
8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Format a date or time, which is the standard millis since 24:00 GMT, Jan
8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * 1, 1970. Overrides DateFormat pure virtual method.
8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Example: using the US locale: "yyyy.MM.dd e 'at' HH:mm:ss zzz" ->>
8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * 1996.07.10 AD at 15:08:56 PDT
8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param cal       Calendar set to the date and time to be formatted
8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  into a date/time string.
8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param appendTo  Output parameter to receive result.
8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  Result is appended to existing contents.
8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pos       The formatting position. On input: an alignment field,
8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  if desired. On output: the offsets of the alignment field.
8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return          Reference to 'appendTo' parameter.
8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.1
8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UnicodeString& format(  Calendar& cal,
8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                    UnicodeString& appendTo,
8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                    FieldPosition& pos) const;
8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Format a date or time, which is the standard millis since 24:00 GMT, Jan
8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * 1, 1970. Overrides DateFormat pure virtual method.
8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Example: using the US locale: "yyyy.MM.dd e 'at' HH:mm:ss zzz" ->>
8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * 1996.07.10 AD at 15:08:56 PDT
8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param cal       Calendar set to the date and time to be formatted
8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  into a date/time string.
8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param appendTo  Output parameter to receive result.
8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  Result is appended to existing contents.
8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param posIter   On return, can be used to iterate over positions
8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  of fields generated by this format call.  Field values
8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  are defined in UDateFormatField.
8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status    Input/output param set to success/failure code.
8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return          Reference to 'appendTo' parameter.
8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.4
9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UnicodeString& format(  Calendar& cal,
9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                    UnicodeString& appendTo,
9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                    FieldPositionIterator* posIter,
9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                    UErrorCode& status) const;
9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    using DateFormat::parse;
9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Parse a date/time string beginning at the given parse position. For
9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date
9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * that is equivalent to Date(837039928046).
9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * By default, parsing is lenient: If the input is not in the form used by
9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * this object's format method but can still be parsed as a date, then the
9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * parse succeeds. Clients may insist on strict adherence to the format by
9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * calling setLenient(false).
9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @see DateFormat::setLenient(boolean)
9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param text  The date/time string to be parsed
9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param cal   A Calendar set on input to the date and time to be used for
9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *              missing values in the date/time string being parsed, and set
9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *              on output to the parsed date/time. When the calendar type is
9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *              different from the internal calendar held by this SimpleDateFormat
9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *              instance, the internal calendar will be cloned to a work
9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *              calendar set to the same milliseconds and time zone as the
9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *              cal parameter, field values will be parsed based on the work
9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *              calendar, then the result (milliseconds and time zone) will
9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *              be set in this calendar.
9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pos   On input, the position at which to start parsing; on
9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *              output, the position at which parsing terminated, or the
9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *              start position if the parse failed.
9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.1
9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void parse( const UnicodeString& text,
9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        Calendar& cal,
9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        ParsePosition& pos) const;
9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set the start UDate used to interpret two-digit year strings.
9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * When dates are parsed having 2-digit year strings, they are placed within
9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * a assumed range of 100 years starting on the two digit start date.  For
9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * example, the string "24-Jan-17" may be in the year 1817, 1917, 2017, or
9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * some other year.  SimpleDateFormat chooses a year so that the resultant
9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * date is on or after the two digit start date and within 100 years of the
9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * two digit start date.
9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * By default, the two digit start date is set to 80 years before the current
9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * time at which a SimpleDateFormat object is created.
9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param d      start UDate used to interpret two-digit year strings.
9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status Filled in with U_ZERO_ERROR if the parse was successful, and with
9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *               an error value if there was a parse error.
9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void set2DigitYearStart(UDate d, UErrorCode& status);
9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Get the start UDate used to interpret two-digit year strings.
9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * When dates are parsed having 2-digit year strings, they are placed within
9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * a assumed range of 100 years starting on the two digit start date.  For
9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * example, the string "24-Jan-17" may be in the year 1817, 1917, 2017, or
9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * some other year.  SimpleDateFormat chooses a year so that the resultant
9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * date is on or after the two digit start date and within 100 years of the
9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * two digit start date.
9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <P>
9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * By default, the two digit start date is set to 80 years before the current
9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * time at which a SimpleDateFormat object is created.
9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status Filled in with U_ZERO_ERROR if the parse was successful, and with
9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *               an error value if there was a parse error.
9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate get2DigitYearStart(UErrorCode& status) const;
9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return a pattern string describing this date format.
9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param result Output param to receive the pattern.
9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return       A reference to 'result'.
9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UnicodeString& toPattern(UnicodeString& result) const;
9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return a localized pattern string describing this date format.
9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * In most cases, this will return the same thing as toPattern(),
9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * but a locale can specify characters to use in pattern descriptions
9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * in place of the ones described in this class's class documentation.
9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * (Presumably, letters that would be more mnemonic in that locale's
9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * language.)  This function would produce a pattern using those
9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * letters.
9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param result    Receives the localized pattern.
9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status    Output param set to success/failure code on
9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  exit. If the pattern is invalid, this will be
9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  set to a failure result.
9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return          A reference to 'result'.
9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                              UErrorCode& status) const;
10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Apply the given unlocalized pattern string to this date format.
10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * (i.e., after this call, this formatter will format dates according to
10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the new pattern)
10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pattern   The pattern to be applied.
10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void applyPattern(const UnicodeString& pattern);
10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Apply the given localized pattern string to this date format.
10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * (see toLocalizedPattern() for more information on localized patterns.)
10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pattern   The localized pattern to be applied.
10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status    Output param set to success/failure code on
10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  exit. If the pattern is invalid, this will be
10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  set to a failure result.
10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void applyLocalizedPattern(const UnicodeString& pattern,
10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                       UErrorCode& status);
10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Gets the date/time formatting symbols (this is an object carrying
10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the various strings and other symbols used in formatting: e.g., month
10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * names and abbreviations, time zone names, AM/PM strings, etc.)
10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return a copy of the date-time formatting data associated
10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * with this date-time formatter.
10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set the date/time formatting symbols.  The caller no longer owns the
10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * DateFormatSymbols object and should not delete it after making this call.
10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param newFormatSymbols the given date-time formatting symbols to copy.
10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set the date/time formatting data.
10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param newFormatSymbols the given date-time formatting symbols to copy.
10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return the class ID for this class. This is useful only for comparing to
10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * a return value from getDynamicClassID(). For example:
10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * <pre>
10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * .   Base* polymorphic_pointer = createPolymorphicObject();
10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * .   if (polymorphic_pointer->getDynamicClassID() ==
10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * .       erived::getStaticClassID()) ...
10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * </pre>
10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return          The class ID for all objects of this class.
10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UClassID U_EXPORT2 getStaticClassID(void);
10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * method is to implement a simple version of RTTI, since not all C++
10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * compilers support genuine RTTI. Polymorphic operator==() and clone()
10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * methods call this method.
10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return          The class ID for this object. All objects of a
10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  given class have the same class ID.  Objects of
10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  other classes have different class IDs.
10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
10726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
10736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UClassID getDynamicClassID(void) const;
10746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
10766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set the calendar to be used by this date format. Initially, the default
10776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * calendar for the specified or default locale is used.  The caller should
10786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * not delete the Calendar object after it is adopted by this call.
10796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Adopting a new calendar will change to the default symbols.
10806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
10816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param calendarToAdopt    Calendar object to be adopted.
10826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
10836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
10846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void adoptCalendar(Calendar* calendarToAdopt);
10856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
10876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
10886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Set a particular UDisplayContext value in the formatter, such as
10896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * UDISPCTX_CAPITALIZATION_FOR_STANDALONE.
10906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param value The UDisplayContext value to set.
10916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status Input/output status. If at entry this indicates a failure
10926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *               status, the function will do nothing; otherwise this will be
10936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *               updated with any new status from the function.
10946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @draft ICU 51
10956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
10966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void setContext(UDisplayContext value, UErrorCode& status);
10976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
10996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
11006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Get the formatter's UDisplayContext value for the specified UDisplayContextType,
11016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * such as UDISPCTX_TYPE_CAPITALIZATION.
11026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param type The UDisplayContextType whose value to return
11036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status Input/output status. If at entry this indicates a failure
11046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *               status, the function will do nothing; otherwise this will be
11056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *               updated with any new status from the function.
11066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return The UDisplayContextValue for the specified type.
11076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @draft ICU 51
11086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
11096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
11106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following methods since they are virtual */
11126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
11136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Sets the TimeZoneFormat to be used by this date/time formatter.
11146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The caller should not delete the TimeZoneFormat object after
11156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * it is adopted by this call.
11166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param timeZoneFormatToAdopt The TimeZoneFormat object to be adopted.
11176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal ICU 49 technology preview
11186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
11196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void adoptTimeZoneFormat(TimeZoneFormat* timeZoneFormatToAdopt);
11206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
11226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Sets the TimeZoneFormat to be used by this date/time formatter.
11236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param newTimeZoneFormat The TimeZoneFormat object to copy.
11246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal ICU 49 technology preview
11256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
11266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual void setTimeZoneFormat(const TimeZoneFormat& newTimeZoneFormat);
11276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
11296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Gets the time zone format object associated with this date/time formatter.
11306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return the time zone format associated with this date/time formatter.
11316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal ICU 49 technology preview
11326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
11336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    virtual const TimeZoneFormat* getTimeZoneFormat(void) const;
11346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_INTERNAL_API
11366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
11376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This is for ICU internal use only. Please do not use.
11386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Check whether the 'field' is smaller than all the fields covered in
11396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * pattern, return TRUE if it is. The sequence of calendar field,
11406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * from large to small is: ERA, YEAR, MONTH, DATE, AM_PM, HOUR, MINUTE,...
11416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param field    the calendar field need to check against
11426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return         TRUE if the 'field' is smaller than all the fields
11436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                 covered in pattern. FALSE otherwise.
11446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal ICU 4.0
11456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
11466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool isFieldUnitIgnored(UCalendarDateFields field) const;
11476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
11506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This is for ICU internal use only. Please do not use.
11516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Check whether the 'field' is smaller than all the fields covered in
11526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * pattern, return TRUE if it is. The sequence of calendar field,
11536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * from large to small is: ERA, YEAR, MONTH, DATE, AM_PM, HOUR, MINUTE,...
11546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pattern  the pattern to check against
11556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param field    the calendar field need to check against
11566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return         TRUE if the 'field' is smaller than all the fields
11576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                 covered in pattern. FALSE otherwise.
11586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal ICU 4.0
11596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
11606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UBool isFieldUnitIgnored(const UnicodeString& pattern,
11616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                    UCalendarDateFields field);
11626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
11646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This is for ICU internal use only. Please do not use.
11656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Get the locale of this simple date formatter.
11666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * It is used in DateIntervalFormat.
11676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
11686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return   locale in this simple date formatter
11696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @internal ICU 4.0
11706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
11716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const Locale& getSmpFmtLocale(void) const;
11726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif  /* U_HIDE_INTERNAL_API */
11736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
11756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    friend class DateFormat;
11766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void initializeDefaultCentury(void);
11786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat(); // default constructor not implemented
11806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
11826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Used by the DateFormat factory methods to construct a SimpleDateFormat.
11836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param timeStyle the time style.
11846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param dateStyle the date style.
11856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param locale    the given locale.
11866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status    Output param set to success/failure code on
11876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  exit.
11886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
11896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
11906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
11926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Construct a SimpleDateFormat for the given locale.  If no resource data
11936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * is available, create an object of last resort, using hard-coded strings.
11946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This is an internal method, called by DateFormat.  It should never fail.
11956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param locale    the given locale.
11966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status    Output param set to success/failure code on
11976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  exit.
11986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
11996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern
12006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
12026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Hook called by format(... FieldPosition& ...) and format(...FieldPositionIterator&...)
12036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
12046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString& _format(Calendar& cal, UnicodeString& appendTo, FieldPositionHandler& handler, UErrorCode& status) const;
12056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
12076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Called by format() to format a single field.
12086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
12096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param appendTo  Output parameter to receive result.
12106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  Result is appended to existing contents.
12116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param ch        The format character we encountered in the pattern.
12126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param count     Number of characters in the current pattern symbol (e.g.,
12136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  "yyyy" in the pattern would result in a call to this function
12146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  with ch equal to 'y' and count equal to 4)
12156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param capitalizationContext Capitalization context for this date format.
12166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param fieldNum  Zero-based numbering of current field within the overall format.
12176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param handler   Records information about field positions.
12186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param cal       Calendar to use
12196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status    Receives a status code, which will be U_ZERO_ERROR if the operation
12206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  succeeds.
12216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
12226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void subFormat(UnicodeString &appendTo,
12236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   UChar ch,
12246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   int32_t count,
12256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   UDisplayContext capitalizationContext,
12266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   int32_t fieldNum,
12276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   FieldPositionHandler& handler,
12286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   Calendar& cal,
12296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   UErrorCode& status) const; // in case of illegal argument
12306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
12326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Used by subFormat() to format a numeric value.
12336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Appends to toAppendTo a string representation of "value"
12346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * having a number of digits between "minDigits" and
12356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * "maxDigits".  Uses the DateFormat's NumberFormat.
12366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
12376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param currentNumberFormat
12386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param appendTo  Output parameter to receive result.
12396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  Formatted number is appended to existing contents.
12406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param value     Value to format.
12416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param minDigits Minimum number of digits the result should have
12426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param maxDigits Maximum number of digits the result should have
12436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
12446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void zeroPaddingNumber(NumberFormat *currentNumberFormat,
12456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           UnicodeString &appendTo,
12466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           int32_t value,
12476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           int32_t minDigits,
12486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           int32_t maxDigits) const;
12496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
12516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return true if the given format character, occuring count
12526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * times, represents a numeric field.
12536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
12546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UBool isNumeric(UChar formatChar, int32_t count);
12556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
12576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns TRUE if the patternOffset is at the start of a numeric field.
12586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
12596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UBool isAtNumericField(const UnicodeString &pattern, int32_t patternOffset);
12606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
12626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns TRUE if the patternOffset is right after a non-numeric field.
12636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
12646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UBool isAfterNonNumericField(const UnicodeString &pattern, int32_t patternOffset);
12656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
12676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * initializes fCalendar from parameters.  Returns fCalendar as a convenience.
12686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param adoptZone  Zone to be adopted, or NULL for TimeZone::createDefault().
12696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param locale Locale of the calendar
12706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status Error code
12716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return the newly constructed fCalendar
12726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
12736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
12746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
12766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * initializes fSymbols from parameters.
12776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param locale Locale of the symbols
12786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param calendar Alias to Calendar that will be used.
12796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status Error code
12806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
12816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
12826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
12846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Called by several of the constructors to load pattern data and formatting symbols
12856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * out of a resource bundle and initialize the locale based on it.
12866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param timeStyle     The time style, as passed to DateFormat::createDateInstance().
12876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param dateStyle     The date style, as passed to DateFormat::createTimeInstance().
12886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param locale        The locale to load the patterns from.
12896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status        Filled in with an error code if loading the data from the
12906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                      resources fails.
12916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
12926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
12936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
12956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Called by construct() and the various constructors to set up the SimpleDateFormat's
12966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Calendar and NumberFormat objects.
12976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param locale    The locale for which we want a Calendar and a NumberFormat.
12986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status    Filled in with an error code if creating either subobject fails.
12996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
13006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void initialize(const Locale& locale, UErrorCode& status);
13016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
13036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Private code-size reduction function used by subParse.
13046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param text the time text being parsed.
13056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param start where to start parsing.
13066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param field the date field being parsed.
13076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param stringArray the string array to parsed.
13086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param stringArrayCount the size of the array.
13096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param monthPattern pointer to leap month pattern, or NULL if none.
13106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param cal a Calendar set to the date and time to be formatted
13116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *            into a date/time string.
13126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return the new start position if matching succeeded; a negative number
13136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * indicating matching failure, otherwise.
13146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
13156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
13166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        const UnicodeString* stringArray, int32_t stringArrayCount,
13176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        const UnicodeString* monthPattern, Calendar& cal) const;
13186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
13206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Private code-size reduction function used by subParse.
13216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param text the time text being parsed.
13226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param start where to start parsing.
13236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param field the date field being parsed.
13246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param stringArray the string array to parsed.
13256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param stringArrayCount the size of the array.
13266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param cal a Calendar set to the date and time to be formatted
13276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *            into a date/time string.
13286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return the new start position if matching succeeded; a negative number
13296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * indicating matching failure, otherwise.
13306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
13316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
13326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                               const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
13336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
13356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Private function used by subParse to match literal pattern text.
13366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
13376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pattern the pattern string
13386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param patternOffset the starting offset into the pattern text. On
13396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *        outupt will be set the offset of the first non-literal character in the pattern
13406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param text the text being parsed
13416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param textOffset the starting offset into the text. On output
13426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                   will be set to the offset of the character after the match
13436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param lenient <code>TRUE</code> if the parse is lenient, <code>FALSE</code> otherwise.
13446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
13456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return <code>TRUE</code> if the literal text could be matched, <code>FALSE</code> otherwise.
13466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
13476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static UBool matchLiterals(const UnicodeString &pattern, int32_t &patternOffset,
13486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                               const UnicodeString &text, int32_t &textOffset, UBool lenient);
13496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
13516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Private member function that converts the parsed date strings into
13526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * timeFields. Returns -start (for ParsePosition) if failed.
13536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param text the time text to be parsed.
13546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param start where to start parsing.
13556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param ch the pattern character for the date field text to be parsed.
13566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param count the count of a pattern character.
13576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param obeyCount if true then the count is strictly obeyed.
13586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param allowNegative
13596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param ambiguousYear If true then the two-digit year == the default start year.
13606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param saveHebrewMonth Used to hang onto month until year is known.
13616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param cal a Calendar set to the date and time to be formatted
13626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *            into a date/time string.
13636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param patLoc
13646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param numericLeapMonthFormatter If non-null, used to parse numeric leap months.
13656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return the new start position if matching succeeded; a negative number
13666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * indicating matching failure, otherwise.
13676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
13686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
13696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], int32_t& saveHebrewMonth, Calendar& cal,
13706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     int32_t patLoc, MessageFormat * numericLeapMonthFormatter) const;
13716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void parseInt(const UnicodeString& text,
13736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  Formattable& number,
13746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  ParsePosition& pos,
13756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  UBool allowNegative,
13766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  NumberFormat *fmt) const;
13776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void parseInt(const UnicodeString& text,
13796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  Formattable& number,
13806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  int32_t maxDigits,
13816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  ParsePosition& pos,
13826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  UBool allowNegative,
13836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                  NumberFormat *fmt) const;
13846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t checkIntSuffix(const UnicodeString& text, int32_t start,
13866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                           int32_t patLoc, UBool isNegative) const;
13876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
13886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
13896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Translate a pattern, mapping each character in the from string to the
13906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * corresponding character in the to string. Return an error if the original
13916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * pattern contains an unmapped character, or if a quote is unmatched.
13926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Quoted (single quotes only) material is not translated.
13936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param originalPattern   the original pattern.
13946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param translatedPattern Output param to receive the translited pattern.
13956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param from              the characters to be translited from.
13966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param to                the characters to be translited to.
13976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status            Receives a status code, which will be U_ZERO_ERROR
13986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                          if the operation succeeds.
13996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static void translatePattern(const UnicodeString& originalPattern,
14016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                UnicodeString& translatedPattern,
14026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                const UnicodeString& from,
14036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                const UnicodeString& to,
14046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                UErrorCode& status);
14056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Sets the starting date of the 100-year window that dates with 2-digit years
14086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * are considered to fall within.
14096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param startDate the start date
14106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param status    Receives a status code, which will be U_ZERO_ERROR
14116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *                  if the operation succeeds.
14126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void         parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
14146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Return the length matched by the given affix, or -1 if none.
14176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Runs of white space in the affix, match runs of white space in
14186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * the input.
14196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param affix pattern string, taken as a literal
14206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param input input text
14216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pos offset into input at which to begin matching
14226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return length of input that matches, or -1 if match failure
14236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t compareSimpleAffix(const UnicodeString& affix,
14256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   const UnicodeString& input,
14266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   int32_t pos) const;
14276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Skip over a run of zero or more Pattern_White_Space characters at
14306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * pos in text.
14316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos) const;
14336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Skip over a run of zero or more isUWhiteSpace() characters at pos
14366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * in text.
14376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos) const;
14396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Initialize NumberFormat instances used for numbering system overrides.
14426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void initNumberFormatters(const Locale &locale,UErrorCode &status);
14446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Get the numbering system to be used for a particular field.
14476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     NumberFormat * getNumberFormatByIndex(UDateFormatField index) const;
14496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Parse the given override string and set up structures for number formats
14526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void processOverrideString(const Locale &locale, const UnicodeString &str, int8_t type, UErrorCode &status);
14546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Used to map pattern characters to Calendar field identifiers.
14576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static const UCalendarDateFields fgPatternIndexToCalendarField[];
14596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Map index into pattern character string to DateFormat field number
14626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static const UDateFormatField fgPatternIndexToDateFormatField[];
14646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Lazy TimeZoneFormat instantiation, semantically const
14676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TimeZoneFormat *tzFormat() const;
14696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Used to map Calendar field to field level.
14726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The larger the level, the smaller the field unit.
14736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * For example, UCAL_ERA level is 0, UCAL_YEAR level is 10,
14746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * UCAL_MONTH level is 20.
14756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static const int32_t fgCalendarFieldToLevel[];
14776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static const int32_t fgPatternCharToLevel[];
14786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The formatting pattern for this formatter.
14816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString       fPattern;
14836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The numbering system override for dates.
14866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString       fDateOverride;
14886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The numbering system override for times.
14916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString       fTimeOverride;
14936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
14956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
14966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The original locale used (for reloading symbols)
14976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
14986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Locale              fLocale;
14996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
15016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * A pointer to an object containing the strings to use in formatting (e.g.,
15026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * month and day names, AM and PM strings, time zone names, etc.)
15036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
15046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateFormatSymbols*  fSymbols;   // Owned
15056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
15076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * The time zone formatter
15086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
15096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TimeZoneFormat* fTimeZoneFormat;
15106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
15126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * If dates have ambiguous years, we map them into the century starting
15136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * at defaultCenturyStart, which may be any date.  If defaultCenturyStart is
15146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * set to SYSTEM_DEFAULT_CENTURY, which it is by default, then the system
15156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * values are used.  The instance values defaultCenturyStart and
15166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * defaultCenturyStartYear are only used if explicitly set by the user
15176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * through the API method parseAmbiguousDatesAsAfter().
15186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
15196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate                fDefaultCenturyStart;
15206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
15226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * See documentation for defaultCenturyStart.
15236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
15246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*transient*/ int32_t   fDefaultCenturyStartYear;
15256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t tztype; // here to avoid api change
15276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    typedef struct NSOverride {
15296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        NumberFormat *nf;
15306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t hash;
15316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        NSOverride *next;
15326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } NSOverride;
15336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    NumberFormat    **fNumberFormatters;
15356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    NSOverride      *fOverrideList;
15376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool fHaveDefaultCentury;
15396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDisplayContext fCapitalizationContext;
15416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
15426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UDate
15446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgSimpleDateFormat::get2DigitYearStart(UErrorCode& /*status*/) const
15456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
15466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return fDefaultCenturyStart;
15476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
15486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
15506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */
15526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
15536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // _SMPDTFMT
15546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof
1555